Instrucciones
MOV destino, fuente = destino ← fuente
ADD destino, fuente = destino ← fuente + destino
Modos de direccionamiento
Datos
Tres posibilidades en las que se especifica para el operando fuente:
- Inmediato: su valor.
Ejemplo: MOV AX , 123AH
- Registro: el que lo contiene (uno o dos bytes).
Ejemplo: MOV CX, AX ó MOV AL, DL
- Memoria: el desplazamiento (16 bits) respecto al principio de un
segmento, especificado según la expresión:
{ BX | BP } [ + { SI | DI } ] [ + desp ] ó { SI | DI } [ + despl ] ó despl
[Registro de segmento por defecto el DS, excepto si se utiliza BP, en
cuyo caso será el SS]
Ejemplos:
MOV AX, WORD1 donde WORD1 es una etiqueta (nombre para el
desplazamiento del dato en memoria que se utiliza en la definición del
segmento de datos)
MOV AX, [BX] = MOV AX, DS:[BX]
(Los direccionamientos [BX+SI], [BX+10] y [BX+SI+10] serían válidos)
MOV AX, [BP+25] = MOV AX, SS:[BP+25]
(Si quisiéramos usar el DS: MOV AX, DS:[BP + 25])
Los modos de direccionamiento que permiten las instrucciones MOV y ADD
son:
reg,reg / mem,reg / reg,mem / mem,inmed / reg,inmed
Instrucciones
- Directo: desplazamiento respecto al CS (mediante una etiqueta)
Estructura de un programa. Ejemplo
DATOS
SEGMENT
NUM1 DB 34H
RES DB ?
DATOS
ENDS
CODIGO
SEGMENT
ASSUME CS:CODIGO, DS:DATOS
INIC: MOV AX, DATOS
MOV DS, AX
MOV
MOV
ADD
MOV
MOV
AL,12H
BL,NUM1
AL,BL
SI,0
[SI+1],AX
MOV AH, 4Ch
INT 21h
CODIGO
END INIC
ENDS
Ejercicios
Escribir un programa que:
(1) Cargue el valor 12H en AH y 34H en AL y que almacene ambos bytes en
las dos primeras posiciones del segmento de datos y que a continuación
almacene AX. Que cargue el valor 1234H en BX y que lo almacene a
continuación. Utiliza las siguientes etiquetas para cada uno de los datos:
‘byte1’, ‘byte2’, ‘word1’ y ‘word2’.
Comprueba en el debugger las instrucciones y los datos en memoria y el
contenido de los registros durante la ejecución del programa. ¿Qué ocupa cada
instrucción? ¿Por qué son diferentes las dos primeras palabras del segmento
de datos después de la ejecución del programa?
(2) Modifica el programa anterior para que la misma definición de datos se
haga en el segmento de datos y para realizar la suma de los bytes y las
palabras en memoria y almacenar los resultados a continuación de los datos.