1. - Modo de direcionamiento empleado en cada instrucción.
Direccionamiento inmediato.
El operando es un dato inmediato contenido en la instrucción, con lo que el
tamaño de la instrucción viene condicionado por el tamaño del operando.
· Direccionamiento directo.
En la instrucción se indica la dirección real de memoria en la que está
contenido el operando. Si el operando ocupa varias posiciones de memoria
consecutivas, en la instrucción figurará la dirección más baja.
· Direccionamiento indirecto a través del registro BX.
La dirección de memoria donde está el operando viene determinada por el
contenido del registro BX.
· Direccionamiento relativo a contador de programa.
Este tipo de direccionamiento se utiliza en las instrucciones de salto
condicional, en las que la dirección de salto se obtiene sumando al registro IP el
desplazamiento contenido en la propia instrucción.
- Origen y destino de los datos en todas las instrucciones de trasferencia.
MOV memoria, registro
· Direccionamiento directo:
1000100W 00rrr110 LSB dir MSB dir
· Direccionamiento indirecto:
1000100W 00rrr111
MOV registro, memoria
Direccionamiento directo:
1000101W 00rrr110 LSB dir MSB dir
Direccionamiento indirecto:
1000101W 00rrr111
MOV memoria, dato inmediato
· Direccionamiento directo:
1100011W 00000110 LSB dir MSB dir LSB dato MSB dato
Direccionamiento indirecto:
1100011W 000000131 LSB dato MSB dato
MOV registro, dato inmediato
1011Wrrr LSB dato MSB dato
14
MOV registro, REGISTRO
1000101W 11rrrRRR
- ¿Consideras las instrucciones 5 y 6 equivalentes?
2. Sí, ya que los dos escriben un dato en memoria.
- ¿Consideras la instrucción 7 equivalente a la 8y 9 en conjunción?
No, ya que cada uno apunta a un punto de memoria distinto.
- ¿Que diferencias existen entre la instrucción 10 y la 14?
El la línea 10 se utiliza el modo de direccionamiento directo y en la línea 14
Modo de direccionamiento indirecto.
Los “[]” indican que el direccionamiento es indirecto hacia “BX”.
- ¿Qué hace el programa?
ORG 700H – Escribe 700 en Hexadecimal en la posición ORG de memoria
SUM1 DW 100H – Declaramos la variable SUM1 de tipo DobleWord con valor
100 en Hexadecimal
ORG 500H – Escribe 500 en Hexadecimal en la dirección de memoria ORG
MOV AX, 123H – Mueve 123 en Hexadecimal a la dirección de memoria AX
borrando lo que contiene esta
MOV AX, SUM1 – Mueve el contenido de SUM1 a la dirección de memoria
AX borrando lo que contiene esta
MOV BX, 200H – Mueve 200 en Hexadecimal a la dirección de memoria BX
borrando lo que contiene esta
MOV BL, 0H – Mueve 0 en Hexadecimal a la dirección de memoria BL
borrando lo que contiene esta
MOV BH, 20H – Mueve 20 en Hexadecimal a la dirección de memoria BH
borrando lo que contiene esta
ADD BX, AX – A lo que hay en el registro BX le sumamos lo que hay en el
registro AX
MOV CX, 702H – Mueve 702 en Hexadecimal a la dirección de memoria CX
borrando lo que contiene esta
MOV BX, CX – Movemos el contenido de la dirección de memoria CX a la
dirección BX borrando lo que contiene esta
ADD [BX], AX – A la dirección de memoria BX le sumamos lo que contiene la
dirección de memoria AX (Direccionamiento indirecto a BX)
HLT – Paramos
END – Fin del programa
3. - ¿Cómo se expresa en ensamblador cada modo de direccionamiento?
Modo registro: MOV destino, origen (MOV AX, BX);
Modo inmediato: MOV registro, valor (MOV AH, 9);
Modo directo: MOV AH, [0000];
Modo indirecto: MOV AL, [SI];
- ¿Qué ocurriría si sustituyéramos la instrucción 12 por “MOV CX,
050EH”?
Que en vez de escribir 702H en Hexadecimal en la dirección de memoria CX,
movería 050E en Hexadecimal en esta misma dirección de memoria