Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Área: NEGOCIOS
1 Curso:ARQUITECTURA DE COMPUTADORES
Módulo:Circuitos y lenguaje de máquina
Área: NEGOCIOS M1
Curso:ARQUITECTURA DE COMPUTADORES
Introducción ......................................................................................................................................................... 1
1. Estructura general de un computador ............................................................................................................. 1
1.1 Hardware y Software ................................................................................................................................................... 2
a. Hardware ................................................................................................................................................................... 2
b. Software .................................................................................................................................................................... 2
1.2 El origen de los computadores .................................................................................................................................... 3
a. Álgebra Booleana ...................................................................................................................................................... 3
b. Aplicación del Álgebra Booleana ............................................................................................................................... 5
2. Circuitos Lógicos ............................................................................................................................................... 6
2.1 Bit................................................................................................................................................................................. 6
2.2 Tabla de verdad ........................................................................................................................................................... 8
2.3 Circuitos combinacionales: Puertas lógicas ................................................................................................................. 9
3. Lenguaje de máquina ..................................................................................................................................... 11
3.1 Diagrama de flujo ...................................................................................................................................................... 11
3.2 Notación a utilizar ...................................................................................................................................................... 13
3.3 Segmentos de memoria ............................................................................................................................................. 13
3.4 Registros .................................................................................................................................................................... 14
3.5 Stack .......................................................................................................................................................................... 16
3.7 Instrucciones de transferencia de datos.................................................................................................................... 18
4. Modos de direccionamiento........................................................................................................................... 22
5. Lenguaje ensamblador de bajo y alto nivel ................................................................................................... 23
Área: NEGOCIOS M1
Curso:ARQUITECTURA DE COMPUTADORES
Hardware
Software
Estructura general de un
computador
Origen del computador
Álgebra Boolena
Bit
Puertas lógicas
Segmentos de memoria
Ejemplo Stack
Introducción
El conocimiento de los elementos claves de un lenguaje ensamblador (assembler) permite conocer el
funcionamiento a bajo nivel de una instrucción de alto nivel (de cualquier lenguaje de programación).
También es necesario en los casos de Ingeniería Inversa para descubrir el funcionamiento de cierto programa
para el cual no se cuenta con el código fuente de programación.
Por otro lado, el conocimiento de los DDF (Diagramas De Flujo) permite enfrentar cualquier desafío con
cualquier lenguaje de programación, ya que la utilización de DDF (incluso solo a nivel mental) da la ventaja de
poder visualizar a priori las temáticas y restricciones de programación.
Una computadora es una máquina electrónica capaz de realizar cálculos con gran rapidez, obedeciendo
instrucciones muy específicas y elementales que reflejan su estructura funcional y organizacional. Se puede
definir conceptualmente a un computador como una máquina que consta de un procesador central, una
memoria, elementos de entrada y elementos de salida. Se representa gráficamente de la siguiente forma:
Memoria
Procesador
Elementos de Entrada Elementos de salida
Central
1
El apartado 1 de este módulo fue extraído desde el repositorio virtual Library de la Red Ilumno. Y corresponde al curso
“Arquitectura de Computadoras” de la Universidad del Istmo, Panamá, miembro de la Red a la cual pertenece IPP:
Área: NEGOCIOS M1
Curso:ARQUITECTURA DE COMPUTADORES Pág. 2
El concepto de arquitectura de computadoras refiere a la integración de la estructura física con la estructura lógica
de una computadora.
Se utiliza el término "arquitectura" para enfatizar la síntesis de elementos de ingeniería y ciencias exactas con
elementos estéticos y de funcionalidad práctica, de la misma manera en que un arquitecto combinará las técnicas
y conocimientos de la ingeniería con la apreciación artística e integración de su obra con su entorno.
Lo que el arquitecto realiza no sólo debe mantenerse en pie durante el tiempo, sino que también debe permitir
cumplir el objetivo para el cual fue construido y resultar del agrado para quien lo use. Así la disciplina dedicada a la
construcción, estudio y aplicación de los computadores recibe el nombre de Arquitectura de Computadores y
puede ser dividida en cinco partes fundamentales: Procesamiento, almacenamiento, entrada y salida,
comunicaciones y control.
a. Hardware
El hardware o los circuitos electrónicos (circuitería) son los elementos físicos y tangibles del computador. El
hardware incluye el CPU, memoria y los dispositivos de entrada y salida que también se les conocen como
periféricos.
b. Software
El software son los programas o código que dan las instrucciones al
computador, que al ejecutarse producen los resultados que se persiguen.
Se le consideran los elementos lógicos e intangibles del computador.
Por la complejidad con la que se encuentran interrelacionados los elementos físicos y lógicos que integran a
un computador es imposible considerar únicamente a los de un tipo durante la fase de diseño. Tan
importante es el hardware, que permite realizar lo que deseamos, mientras que el software nos permite
expresarlo y controlarlo. En la arquitectura de computadores, una computadora es vista como un sistema de
cómputo y como tal, se requiere de un amplio conocimiento de las estructuras de hardware y software junto
con las estrechas interacciones con los algoritmos usados (para el cálculo o asignación de recursos).
a. Álgebra Booleana
Esta álgebra nos permite inferir, a partir de un conjunto de premisas, cuáles son las conclusiones a las que se
puede llegar de una manera lógica. Y dado que una conclusión puede ser cierta o falsa (2 estados), esta
álgebra puede representarse mediante el uso de interruptores. Similar a los interruptores de encendido y
apagado de la luz.
I. cualquier proposición única, simple o compleja, es llamada variable y está representada por una letra
del alfabeto;
II. existen ciertos símbolos que muestran las relaciones entre las proposiciones; y
III. estas relaciones pueden expresarse matemáticamente.
Área: NEGOCIOS M1
Curso:ARQUITECTURA DE COMPUTADORES Pág. 4
En 1847, un matemático inglés llamado George Boole publicó un ensayo acerca del análisis matemático de la
lógica. En este documento estableció un conjunto de principios a partir de los cuales pueden deducirse
afirmaciones lógicas más complicadas. Lo interesante del método introducido por Boole es la herramienta utilizada
para llevar a cabo las deducciones: el álgebra. Esto es, las proposiciones son escritas en términos algebraicos
mediante el uso de símbolos que representan ideas, y se llega a las deducciones por medio de operaciones
algebraicas.
Ejemplo:
• Por otro lado, las relaciones básicas entre las proposiciones son las siguientes:
"OR" (O no exclusiva)
"AND" (Y)
"NO" (NO)
• Operación suma
La operación suma (+) asigna a cada par de valores a, b de A un valor c de A:
Su equivalencia en lógica de interruptores, es un circuito de dos interruptores en paralelo.
a b a+b
0 0 0
0 1 1
1 0 1
1 1 1
✓ Para que la afirmación A · B = D sea verdadera, será necesario que la persona cumpla con ambos
requisitos para obtener la jubilación con salario íntegro; esto es, deberá ser mayor de 60 y con más
de 25 años de trabajo. Si alguna de las afirmaciones, o ambas, son falsas, entonces la proposición "A
AND B" será falsa.
Finalmente, la afirmación "NO A" (se denota) será cierta únicamente si la persona en cuestión es
menor de 60 años.
✓ Pueden hacerse combinaciones más elaboradas de premisas, a partir de las relaciones básicas; así
como también es posible escribir una misma relación de maneras diferentes. Por ejemplo: B A= A + B
significa: tener a "todos los que tienen más de 60 años de edad o que tienen más de 25 años de
antigüedad" es lo mismo que tener a todos los que son mayores de 60 años o que además de ser
menores de 60 años tienen más de 25 años de antigüedad.
IMPORTANTE
Nótese que aun con relaciones muy simples como ésta se vuelve difícil traducirlas al lenguaje común, y más aún,
efectuar deducciones. Esto nos muestra que una de las grandes ventajas de reducir operaciones lógicas a términos
de operaciones matemáticas es que, a diferencia del lenguaje común, las matemáticas no tienen ambigüedades.
1 VERDADERO Encendido
0 FALSO Apagado
Luego de haber comprendido los elementos del algebra Booleana se puede entender lo fácil que es utilizar la
electricidad para representar los valores verdadero (1) o falso (0). Eléctricamente esto es proporcionado por
la presencia o ausencia de voltaje.
Área: NEGOCIOS M1
Curso:ARQUITECTURA DE COMPUTADORES Pág. 6
DEFINICIÓN IMPORTANTE
¿Qué es Voltaje? La tensión eléctrica o diferencia de potencial es una magnitud física que cuantifica la diferencia
de potencial eléctrico entre dos puntos. También se puede definir como el trabajo por unidad de carga ejercido por
el campo eléctrico sobre una partícula cargada para moverla entre dos posiciones determinadas. Se puede medir
con un voltímetro.
2. Circuitos Lógicos
Los circuitos/puertos lógicos son una forma simbólica simple de enfrentar la construcción de circuitos
eléctricos reales. Tienen una base matemática muy fuerte y requiere la memorización/recordación de las
tablas de verdad asociadas a cada uno de ellos.
Los circuitos eléctricos son elementos físicos que funcionan en base a estímulos/pulsos eléctricos que son
reducidos a pequeñas cantidades de Volts, con señales que son definidas como 0 y 1 (digitalmente), y que se
relacionan con los pulsos de Volts requeridos, y sin los cuales no podrían funcionar.
2.1 Bit
Del concepto binario surge el término que se
conoce comúnmente en el ambiente de DEFINICIÓN IMPORTANTE
computadores como bit (del término en inglés de Un bit es la unidad mínima que se utiliza en la informática
Binary digIT – dígito binario). Sin embargo este y por medio de la cual, a través de secuencias de bits, se
nivel mediante el cual un computador funciona es puede representar cualquier valor como números,
impráctico y limitado para interactuar con el palabras, e imágenes.
mismo.
Si fuese necesario que nosotros utilizáramos dicho lenguaje para comunicarnos con las computadoras, tendríamos
más problemas de los que intentamos resolver. Para dar solución a este problema han sido creados los lenguajes
de alto nivel, los cuales consisten en una serie de instrucciones que pueden ser entendidas, y aprendidas, tanto
por el hombre como por las máquinas. Dentro de la computadora, estos programas puente, comprensibles para el
hombre, son traducidos al lenguaje de las computadoras por programas llamados compiladores.
Entonces, un Bit es la unidad mínima de información y corresponde a un pulso eléctrico, donde una variación
entre 2 y 5 Volts representa el valor “1”, y una variación cercana a 0 Volts representa un valor “0”.
IMPORTANTE
Para efectos de esta asignatura se considerara que 1 Volt representara un valor “1”, y que 0 Volt representa a un
valor “0”. Esos valores de “0” y “1” se les llamaran Bit.
Volts
Pulsos
0011100010100
Otro ejemplo lo encontramos en la representación de las letras y símbolos interpretados por los
computadores basados en el código ASCII (American Standard Code for Information Interchange por sus
siglas en inglés). Es la representación del alfabeto en código binario en 7-bits pero se le conoce de 8 bits por
uno adicional de paridad.
Como hemos visto, las computadoras funcionan con voltajes que representan números, letras y decisiones. El
código ASCII es una representación numérica de un carácter como ‘a’ o el símbolo ‘@’. Como otros códigos
de formato de representación de caracteres, el ASCII es un método para una correspondencia entre bits y
una serie de símbolos (alfanuméricos y otros), permitiendo de esta forma la comunicación con las
computadoras. El código de caracteres ASCII se usa en casi en todos los computadores.
Área: NEGOCIOS M1
Curso:ARQUITECTURA DE COMPUTADORES Pág. 8
Para formar la letra “a” minúscula en el código ASCII su valor es representado por el valor 097 y la misma es
representada por el binario 01100001 (ver figura 4). Igualmente el símbolo “?” es representado por el ASCII
valor 063 y en binario 00111111 Siendo estos ejemplos sencillos, se aclararán más adelante al enfocarnos en
el área de Software.
IMPORTANTE
Es importante resaltar que se han creado muchos lenguajes de alto nivel que son más fáciles de utilizar que otros,
o más simples, o más lógicos, o mejor estructurados, o más compactos, o con características más apropiadas para
llevar a cabo cierto tipo de trabajo, etc. Pero todos sirven para el mismo fin: facilitar la comunicación hombre-
computador. Es la forma como las tareas a ejecutar son llevadas a cabo por los computadores.
En ese curso, se veremos casos sencillos de circuitos lógicos, en que se tiene una o varias entradas, y solo una
salida.
Área: NEGOCIOS M1
Curso:ARQUITECTURA DE COMPUTADORES Pág. 9
Para la puerta lógica “Buffer o Igualdad”, se tiene que en la entrada puede ser un 0 o un 1, y su salida seria un
0 o un 1, respectivamente. Es decir, la puerta lógica “Buffer/Igualdad” no altera la entrada.
A Y a y
0 0
1 1
Otra forma de leer la tabla de verdad, es que se presenta un elemento de entrada (A) y un elemento de salida
(Y). Luego, si recorremos la tabla de arriba a abajo desde la izquierda, veremos que si A = 0, la salida sería
idéntica Y = 0. La segunda fila, indica que si A = 1, la salida seria Y = 1. Por eso a esa puerta lógica se le llama
Buffer/Igualdad, ya que no altera la entrada y mantiene su valor en la salida.
a b y
0 0 0
0 1 0
1 0 0
1 1 1
Vemos que esta puerta lógica tiene dos entradas (A y B) y una salida (Y). Luego, leyendo fila a fila:
Lo anterior es una verdad o tautología, es decir dada esas entradas, el valor de salida siempre será el
mismo.
NOT Y=~A
A Y
A y 0 1
1 0
OR A B Y Y=A+B
0 0 0
0 1 1
1 0 1
1 1 1
NOR A B Y Y=~(A+B)
0 0 1
0 1 0
1 0 0
1 1 0
AND A B Y Y=AxB
0 0 0
0 1 0
1 0 0
1 1 1
NAND A B Y Y=~(AxB)
0 0 1
0 1 1
1 0 1
1 1 0
XOR A B Y Y=AΘB
0 0 0
0 1 1
1 0 1
1 1 0
Área: NEGOCIOS M1
Curso:ARQUITECTURA DE COMPUTADORES Pág. 11
1 0
0 10 0
3. Lenguaje de máquina
El objetivo del módulo es acercar al estudiante al lenguaje de máquina a través de la revisión del lenguaje
ensamblador de bajo nivel. El lenguaje de maquina como tal, son códigos 0 y 1, o normalmente expresados
como códigos hexadecimales. No llegaremos a ese nivel, pero se darán ejemplos en que se mostrarán
direcciones de memoria en valores hexadecimales, solo como una forma de clarificar ideas.
Primero, se debe tener clara la actividad y luego separarla en actividades más simples. Por ejemplo, abrir una
botella de bebida, es la actividad general, y se definen las subactividades que la componen:
Inicio
Tomar la botella
Tomar el
destapador Conseguir
destapador
¿Sirve el no
destapador?
sí
Fin
IMPORTANTE
En este curso utilizaremos la notación Intel que es la más conocida y utilizada. Ambas notaciones son ligeramente
diferentes, y ante un caso real de la vida en que se requiera programar en assembler, la notación no será de gran
importancia ya que ambos serán traducidos al lenguaje de máquina de forma equivalente.
Hay que pensar el lenguaje assembler como un lenguaje de alto nivel como C, Python, Ruby u otro, y que a
través de un proceso llamado compilación, se traduce ese lenguaje assembler a un lenguaje de maquina
binario.
También existen registros de 8-bits, los cuales cumplen la misma función que los de 16 bits, pero con menor
almacenamiento. Algunos de estos son:
• AH – AL: Registros utilizado principalmente como acumuladores.
• BH – BL: Registros base. Se utilizan normalmente para direccionamiento indexado.
• CH – CL: Registros de conteo. Se utilizan normalmente para conteo de ciclos en operaciones
iterativas.
• DH – DL: Registros de datos. También se utilizan en operaciones de entrada/salida.
Área: NEGOCIOS M1
Curso:ARQUITECTURA DE COMPUTADORES Pág. 15
• IP (Instruction Pointer)
Este registro es modificado implícitamente por la instrucción CALL y RET, como se verá más adelante.
Además, el conjunto de instrucciones de J* (saltos condicionales) también modifican el contenido del
registro EIP.
Lo anteriormente explicado es la forma correcta de ejecutar dicho registro, pero existen formas
indirectas de modificar este registro. Estas técnicas, lejos del alcance de este curso, se utilizan para
forzar la ejecución de código malicioso, y así ganar privilegios sobre una plataforma.
• SP (Stack Pointer)
El registro de 16-bits SP indica el offset de los datos en el stack del programa. Utilizando la referencia
al segmento de stack, se puede definir que la posición actual del stack se encuentra en SS:SP.
• BP (Base Pointer)
Este registro ayuda a referenciar los parámetros utilizados en la llamada a una subrutina/función. Si
los parámetros están en el stack, entonces la referencia exacta a los parámetros se encuentra en
SS:BP.
• DI (Destination Index)
Se utiliza mayormente para indexar cadenas de caracteres (strings) como destinación.
3.5 Stack
El stack (pila) es una estructura de datos, que utiliza la memoria desde la CPU2 y cuya función es apilar datos
para operaciones. Además la CPU se utiliza ampliamente para las llamadas a funciones para dejar registros
que le permiten regresar a la posición original de ejecución. También se utiliza para realizar operaciones
básicas sin utilizar registros directamente.
Figura 8. Stack
El stack funciona en modalidad LIFO (Last In First Out), es decir, la entrada/salida al stack se realiza por un
solo punto. Desde el punto de vista de la memoria, el stack inicia en una posición pero a medida que ingresan
elementos en ella, la posición decrece. El registro ESP lleva la posición actual del último elemento que ingresó
a la pila. Se debe tener en cuenta esto al momento de realizar operaciones sobre el stack.
2
Unidad central de procesamiento o unidad de procesamiento central (conocida por las siglas CPU, del inglés: central
processing unit)
Área: NEGOCIOS M1
Curso:ARQUITECTURA DE COMPUTADORES Pág. 17
Declara una variable de nombre “var” que utilizara 1 byte de espacio y que contiene el
var DB 4
valor “4”
Declara una variable de nombre “var2” que utilizara 1 byte de espacio pero no está
var2 DB ?
inicializada.
Declara una variable sin nombre que utilizara 1 byte y que contiene el valor “3”. Su
DB 3
referenciación seria var2 + 1
Declara una variable de nombre “var3” que utilizara 2 bytes (word) y que contiene un
var3 DW ?
valor no inicializado.
Declara una variable de nombre “var4” que utilizara 4 bytes (double word) y que contiene
var4 DD 7000h
el valor 7000h o equivalentemente 28672 decimal).
Declara un string o cadena de caracteres que contiene el texto “Hola” y finaliza con un
str DB ‘Hola’,0
byte en 0, es decir la declaración contiene 5 bytes).
Donde:
Para la siguiente tabla se usará “dest” para indicar el destino, y “orig” para indicar el origen. En los casos que
sea necesario se usarán nombres como “val”, para indicar un valor cualquiera.
A continuación una tabla que presenta las principales instrucciones de transferencia de datos, su instrucción,
uso y ejemplos.
Tipo de
Instrucción Uso Ejemplo
instrucción
MOV dest,orig Copia el contenido de orig a dest mov eax, ebx
Transferencia PUSH val Inserta val en el stack push eax
de datos POP val Extrae el valor de stack y lo deja en val pop eax
LEA dest,orig Copia en dest el valor referido por orig LEA DI, MENSAJE
Realiza la operación AND bit a bit entre dest y AND eax, ebx
AND dest, orig
orig, dejando el resultado en dest
Realiza la operación OR bit a bit entre dest y OR eax, ebx
OR dest, orig
orig, dejando el resultado en dest
NOT val Realiza la operación NOT bit a bit para val. NOT ebx
NEG val Realiza la negación complemento dos de val NEG ebx
Manejo de Realiza un desplazamiento hacia la izquierda SHL eax, 5
SHL val, contador
bits de val en la cantidad indicada por contador
Realiza un desplazamiento hacia la derecha SHR eax, 10
SHR val, contador
de val en la cantidad indicada por contador
Rota hacia la derecha los bits de val en la ROR eax, ebx
ROR val, contador
cantidad indicada por contador
Rota hacia la izquierda los bits de val en la ROL eax,5
ROL val, contador
cantidad indicada por contador
Suma dest y orig bit a bit, dejando el ADD eax, 3
ADD dest, orig
resultado en dest
Resta dest y orig bit a bit, dejando el SUB eax, 5
SUB dest, orig
resultado en dest
INC val Incrementa en 1 el valor en val INC eax
DEC val Decrementa en 1 el valor en val DEC ebx
Multiplicación entera de dest y orig. Se IMUL eax, val
Aritméticas
IMUL dest, orig almacena el resultado en dest y este
debe ser un registro de 32 bits
Multiplicación entera de orig y val. Se IMUL eax, ebx, 4
almacena el resultado en dest y este
IMUL dest, orig, val
debe ser un registro de 32 bits. Val debe
ser una constante
IDIV val Ver explicación al final de esta tabla* IDIV eax
Área: NEGOCIOS M1
Curso:ARQUITECTURA DE COMPUTADORES Pág. 19
Control de
flujo jle label (jump if less
than or equal)
*IDIV val
La instrucción IDIV merece una mención especial porque tiene un funcionamiento que no puede ser
explicado en pocas líneas.
Esta instrucción utiliza un solo operando (divisor) con signo y este puede ser 1 byte (8-bits), 1 word (16-bits)
o 1 double-word (32-bits), ya sea a través de un registro especial o a través de un área de memoria directa.
Cualquiera sea el caso, el uso de registros con el dividendo es de la siguiente forma:
Área: NEGOCIOS M1
Curso:ARQUITECTURA DE COMPUTADORES Pág. 20
8 bits (byte) AX AL AH
; idem al caso anterior pero se usará un área
de memoria
DIVISOR DB 5
MOV AX, -21
IDIV DIVISOR
; AL = -4 y AH = -1
; Se calculara -21/5
MOV AX, -21
MOV DX, -1
; Lo anterior porque la representación
binaria de -21 (32-bits)
; es: 11111111111111111111111111101011
que al separarlo en
16 bits (word) DX:AX AX DX ; dos grupos de 16 bits queda como
1111111111111111 y
; 1111111111101011, que en decimal
corresponden a -1 y -21
; respectivamente
MOV BX , 5
IDIV BX
; AX = -4 y DX = -1
; Se calculara -21/5
MOV EAX, -21
MOV EDX, -1
; Valga la misma explicación de la
32 bits (dword) EDX:EAX EAX EDX separación binaria del
; ejemplo anterior
MOV EBX, 5
IDIV EBX
; EAX = -4 y EDX = -1
Tener en consideración que el registro que almacena el dividendo, el cuociente y resto son fijos y no
cambian.
En los casos en que la división se realice sobre números sin signo, se debe tener cuidado de inicializar DX y
EDX con ceros antes de ejecutar la instrucción, o se tendrán valores equivocados.
Área: NEGOCIOS M1
Curso:ARQUITECTURA DE COMPUTADORES Pág. 21
A continuación veremos ejemplos de programación assembler, presentando varias soluciones equivalentes para
una misma instrucción.
Ejemplo 1
Asignar un valor 1 a un registro e incrementarlo en 2
Ejemplo 2
Asignar el valor 10 al registro ax y multiplicarlo por 4
Solución 1 Solución 2
mov eax, 10 mov ax, 10
imul eax, 4 shl ax, 2
Notar que para el primer ejemplo se utilizó el registro eax y en el segundo el registro ax. Esto porque la instrucción
IMUL requiere que el registro utilizado debe ser de 32-bits (eax), en cambio ax es un registro de 16-bits
Para la solución 3, se debe considerar la representación binaria del valor 10 (1010 = 2**3 + 2**1). Si se aplica la
instrucción SHL en dos posiciones quedaría como 101000 = 40 (2**5 + 2**3). El multiplicando es 4, cuya
representación binaria es 100 o 2**2. Luego, el SHIFT a la izquierda debe ser de 2 posiciones binarias (el
exponente nos entrega ese valor). Si lo hubiéramos multiplicado por 8 (1000 = 2**3), entonces el SHIT a la
izquierda seria de 3 posiciones.
Ejemplo 3
Hacemos un ciclo que se inicia con el valor 10, decrementando en 1 y hasta que lleguemos al valor 0.
Solución 1
mov cx, 10 Asignamos el valor 10 al registro cx
ciclo: Definimos el inicio del ciclo con el label “ciclo”
cmp cx, 0 Comparamos el valor del registro cx con 0. Eso modifica “machine status word”
Se verifica si “machine status word” indica que la comparación anterior es cero o no. Si es
jz finaliza
cero, hará un salto al label “finaliza”
Si no hubo salto al label “finaliza”, se ejecuta esta instrucción que realiza el decremento del
dec cx registro cx
Esto también se podría implementar con la instrucción “sub cx, 1”
jmp ciclo: Se ejecutara esta instrucción que indica un salto incondicional al label “ciclo”, para continuar.
Cuando se cumple la condición de que cx es cero, la ejecución del programa continua a partir
finaliza:
de acá.
Área: NEGOCIOS M1
Curso:ARQUITECTURA DE COMPUTADORES Pág. 22
Tipo de
Detalles Ejemplo
direccionamiento
Uno de los operandos es un registro. COUNT DB 1
TASA DB 3
De registro MOV eax,ebx
MOV dx, TASA
MOV COUNT, CL
Uno de los operandos es un valor constante o una BYTE_VALUE DB 150
Inmediato expresión. ADD BYTE_VALUE, 6
MOV AX, 45H
Algunos de los operadores hacen referencia directa a 0x1234:
memoria. El uso de [] es para indicar que se trata de una MOV [0x1234], AX
referencia a memoria absoluta y relativo al segmento de BYTE DB 2
Directo datos. Para el ejemplo, la dirección de memoria real estaría MOV BYTE, 3
almacenada en DS + 0x1234.
En el segundo ejemplo, la dirección de memoria de BYTE se
resuelve como DS + BYTE.
Para este caso, la dirección de memoria está almacenada en MOV AX, 0x1234
Registro Indirecto un registro. Por ello, se debe utilizar [] sobre el registro que MOV [AX], BX
contiene la dirección de memoria.
Es muy parecido al modo de direccionamiento directo pero TABLA DB 1, 2, 3, 4,
se utiliza offset para direccionar elementos. 5
Directo con offset
Ambos ejemplos referencian equivalentemente al tercer MOV CL, TABLA + 2
elemento de TABLA. MOV CL, TABLA[2]
Se utiliza generalmente para variables tipo array o lista de TABLA2 DW 0, 0, 0, 0
elementos.
Para el ejemplo, [TABLA2] se resuelve como la dirección de MOV EBX, [TABLA2]
memoria real de la definición de TABLA2. MOV [EBX], 100
De memoria El primer MOV equivale a asignar 100 al primer elemento de ADD EBX, 2
indirecto TABLA2 o equivalentemente TABLA2[0]. MOV [EBX], 36
Con ADD se cambia la dirección en EBX a dos bytes
adicionales.
EL ultimo MOV asigna el valor 36 a el segundo elemento del
array, o equivalentemente a TABLA2[1].
Se utiliza el registro SI/DI para índice. MOV [BX + SI], BP
Para este ejemplo, el valor de [BX + SI] se resuelve como DS
Base más índice
+ BX + SI y eso identifica el valor de memoria real a la que se
copiara el contenido del registro BP.
Área: NEGOCIOS M1
Curso:ARQUITECTURA DE COMPUTADORES Pág. 23
A continuación, haremos la comparación de un programa que escribe “Hola mundo” en ambos lenguajes
assembler.
section .text
global _start ;must be declared for linker (ld)
_start: ;tells linker entry point
mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
section .data
msg db 'Hello, world!', 0xa ;string to be printed
len equ $ - msg ;length of the string
begin HelloWorld;
end HelloWorld;
APORTE A TU FORMACIÓN
Los temas presentados en este módulo representan una enorme utilidad para la vida laboral. Si bien es posible que
ustedes no tengan necesidad de programar en lenguaje assembler en sus lugares de trabajo, si tendrán que utilizar
los Diagramas de Flujo (DDFs) ya sea mentalmente o en papel para documentar su trabajo.
Mientras que el álgebra de Bool visto a través de las tablas de verdad, será utilizado a lo largo de toda su vida
laboral, en la programación con cualquier lenguaje.
Área: NEGOCIOS M1
Curso:ARQUITECTURA DE COMPUTADORES Pág. 25
Obligatoria
Prieto, E. A., Lloris, R. A., & Torres, C. J. C. (2006). Introducción a la informática (4a. ed.). Madrid, ES: McGraw-Hill
España. Capítulos 7 y 8.
http://site.ebrary.com/lib/ippsp/reader.action?ppg=232&docID=10693150&tm=1496162051116
Complementaria
Prieto, E. A., Lloris, R. A., & Torres, C. J. C. (2006). Introducción a la informática (4a. ed.). Madrid, ES: McGraw-Hill
España. Capítulos 4 al 6.
http://site.ebrary.com/lib/ippsp/reader.action?ppg=100&docID=10693150&tm=1496162138216