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.