CONTENIDO Repertorio de Instrucciones Modos de Direccionamiento Lenguaje de Mquina Programas con Debug REPERTORIO DE INSTRUCCIONES El repertorio de instrucciones de los microprocesadores 8086 y 80286 se agrupan segn el tipo de operacin que realizan: De transferencia de datos. Aritmticas, lgicas, desplazamiento y rotacin. De cadenas. De manipulacin de bits. De control de programas. De control de mquina. REPERTORIO DE INSTRUCCIONES Las instrucciones de transferencia de datos consisten en copiar, mover o intercambiar datos entre, registros o registro-memoria o registro-puerto E/S: MOV (copiar), XCHG (intercambiar), PUSH (almacenar en pila), POP (cargar de pila), LEA (cargar direccin efectiva), OUT (sacar dato por puerto), IN (ingresar dato por puerto), XLAT (ingresar una tabla de conversin). REPERTORIO DE INSTRUCCIONES Las instrucciones aritmticas son operaciones de la ALU: ADD (sumar), ADC (sumar con acarreo), SUB (restar), SBB (restar con prstamo), CMP (comparar), DEC (decrementa), INC (incrementa), MUL (multiplicacin sin signo), IMUL (multiplicacin con signo), DIV (divisin sin signo), IDIV (divisin con signo) REPERTORIO DE INSTRUCCIONES Las instrucciones lgicas son tambin operaciones de la ALU: NEG (complemento a dos), NOT (complemento a uno), AND (and bit a bit), OR (or bit a bit), XOR (xor bit a bit). Los desplazamientos SAL,SHL (hacia la izquierda), SAR, SHR (hacia la derecha) Las rotaciones RCL, ROL (hacia la izquierda), RCR, ROR (hacia la derecha) REPERTORIO DE INSTRUCCIONES Las instrucciones de cadenas se emplean para manipular una lista de datos en la memoria: MOVS (copiar cadena), CMPS (comparar cadenas), INS (almacenar cadenas desde puerto), OUTS (sacar cadena hacia puerto). Las instrucciones de manipulacin de bits se emplean para manejar datos de bits: STC (carry = 1), CLC (carry = 0), CMC (complementar carry), STD (direcction = 1), CLD (direction = 0), STI (interrupt = 1), CLI (interrupt = 0). REPERTORIO DE INSTRUCCIONES Las instrucciones de control de programa sirven para posicionarse dentro de una programa o para llamar a subrutina): CALL (llamar subrutina), RET (retornar a programa principal), JMP (salto incondicional), LOOP (bucle). Los saltos condicionales forman una larga lista. Ej: JE, JNE, JG, JNG, JCXZ, JZ, JNZ, JNC, JC, JPO, JPE, JP, JS. REPERTORIO DE INSTRUCCIONES Las instrucciones de control de mquina afectan la operacin del procesador: INT (interrupciones y las hay de variadas formas), HLT (alto), LOCK (bloquear el bus), NOP (no operacin), ESC (transmitir informacin al coprocesador), WAIT (esperar que acabe el coprocesador. MODOS DE DIRECCIONAMIENTO En los microprocesadores Intel se encuentran varios modos de direccionamiento bsicos: De registro Inmediato Directo Indirecto Base + ndice Relativo de registro Relativo base + ndice MODOS DE DIRECCIONAMIENTO Para ilustrar los modos de direccionamiento se tomar como ejemplo la instruccin MOV que es muy sencilla como operacin y tiene varios modos. La sintaxis de esta instruccin es: MOV destino, fuente y lo que est en la fuente se copia en el destino. En el destino puede haber registro o memoria, en la fuente puede haber registro, memoria o dato inmediato. Las principales opciones son: MOV reg, reg MOV reg, mem MOV mem, reg MOV reg, inm MODOS DE DIRECCIONAMIENTO El direccionamiento por registro opera solamente con registros: destino y fuente son registros. Ejemplo: MOV AX, BX lo que est en BX se copia en AX. MODOS DE DIRECCIONAMIENTO En el direccionamiento inmediato, el dato que va a ser manipulado se conoce al momento de leer la instruccin y antes de ser ejecutada. Ejemplo: MOV AX, 1234h el dato 1234h se copia en AX. MODOS DE DIRECCIONAMIENTO En el direccionamiento directo, el dato se encuentra en memoria y debe ser ubicado con la direccin que se provee al momento de leer la instruccin. Ejemplo: MOV AX, [0100h] lo que est entre corchetes es el desplazamiento dentro del segmento de datos y sirve para localizar el dato a ser copiado en AX. MODOS DE DIRECCIONAMIENTO En el direccionamiento indirecto, el dato est en la memoria y se posiciona con el desplazamiento que se encuentra en el registro puntero o base. Ejemplo: MOV AX, [BX] BX contiene el desplazamiento en el segmento de datos para ubicar el dato que ser copiado en AX. MODOS DE DIRECCIONAMIENTO En el direccionamiento base + ndice, el dato de la memoria se posiciona con la suma del contenido de un registro base y un registro ndice. Ejemplo: MOV AX, [BX + SI] al sumar BX con SI se obtiene el desplazamiento del segmento donde se ubica el dato a ser copiado en AX. MODOS DE DIRECCIONAMIENTO En el direccionamiento relativo por registro, la posicin del dato en la memoria es la suma del contenido de un registro puntero con un nmero de uno o dos bytes (offset). Ejemplo: MOV AX, [BX + 0020h] la suma de BX con 0020h permite posicionar el dato en la memoria que se copia en AX. MODOS DE DIRECCIONAMIENTO En el direccionamiento relativo base + ndice, el dato de memoria se ubica con la suma del contenido de un registro base y un registro ndice ms un nmero offset. Ejemplo: MOV AX, [BX + SI + 0020h] la suma de BX con SI con 0020h es la posicin en memoria del dato que va a ser copiado en AX. MODOS DE DIRECCIONAMIENTO Otras reglas adicionales deben ser consideradas en los modos de direccionamiento: Si el orden del destino y de la fuente se intercambian se mantiene el mismo modo de direccionamiento. [Notar que no se puede intercambiar operandos en el modo de direccionamiento inmediato donde el dato a manipular siempre est en la fuente]. MODOS DE DIRECCIONAMIENTO Destino y fuente no pueden ser ambos memoria del mismo segmento. Uno de ellos tiene que ser registro. El registro determina el tamao del operando. En procesadores Intel posteriores aparecern nuevos modos de direccionamiento con opciones de transferencia memoria - memoria o memoria - inmediato. Destino y fuente deben tener el mismo tamao. Si en el destino o en la fuente se encuentra un registro, entonces el tamao del operando debe corresponder al tamao del registro. MODOS DE DIRECCIONAMIENTO Un dato mayor de un byte se escribe en la memoria en varias posiciones consecutivas: el byte ms significativo va en la direccin ms grande y el byte menos significativo, en la menor. Por ejemplo: En la instruccin MOV AX, 5734h seguido de MOV [0100h], AX , el dato a escribir en la memoria es:
0100 34 Byte menos significativo
0101 57 Byte ms significativo
Al leer de la memoria, el dato mayor de un byte tiene
tambin la misma disposicin. LENGUAJE DE MQUINA El lenguaje de mquina es el cdigo binario que el microprocesador utiliza para identificar instrucciones y controlar su funcionamiento. En los procesadores Intel, la longitud de las instrucciones del lenguaje de mquina puede variar desde 1 hasta 13 bytes. Para los procesadores de 16 bits la estructura de las instrucciones en lenguaje de mquina vara segn el modo de direccionamiento. LENGUAJE DE MQUINA Para los Modos de Direccionamiento de Registro o los que posicionan memoria, el formato es: LENGUAJE DE MQUINA Para el Modo de Direccionamiento Inmediato el formato es:
A veces el cdigo de operacin se escribe con
ms de un byte. LENGUAJE DE MQUINA FORMA BSICA
El cdigo de operacin elige la operacin que realiza
el microprocesador. Generalmente es de un byte y contiene la siguiente informacin:
Cdigo operacin D W
Cuando D=1, el dato fluye del campo de R/M al
campo de REG; cuando D=0, el dato fluye del campo de REG al campo de R/M. Cuando W=1, el dato es de 16 bits; cuando W=0, el dato es de 8 bits. LENGUAJE DE MQUINA FORMA BSICA LENGUAJE DE MQUINA FORMA BSICA
En el byte de Campos MOD-REG-R/M, el campo
MOD especifica el modo de direccionamiento de acuerdo a la tabla adjunta. El campo REG especifica el tipo de registro que es utilizado de acuerdo a lo que indica la tabla de registros. El campo R/M especifica el tipo de puntero utilizado en la memoria o en todo caso especifica el otro registro si MOD=00 LENGUAJE DE MQUINA FORMA BSICA
TABLA PARA EL CAMPO MOD
MOD funcin
00 Usa memoria sin desplazamiento (offset)
01 Usa memoria con un desplazamiento de 8 bits
con signo (offset) 10 Usa memoria con un desplazamiento de 16 bits con signo (offset) 11 El campo R/M es un registro. Slo para el modo de direccionamiento de registro. LENGUAJE DE MQUINA FORMA BSICA LENGUAJE DE MQUINA FORMA BSICA TABLA PARA EL CAMPO REG Cdigo W=0 W=1 000 AL AX 001 CL CX 010 DL DX 011 BL BX 100 AH SP 101 CH BP 110 DH SI 111 BH DI LENGUAJE DE MQUINA FORMA BSICA Cdigo Direccionamiento 000 DS:[BX+SI] 001 DS:[BX+DI] TABLA PARA EL CAMPO 010 SS:[BP+SI] DE R/M 011 SS:[BP+DI] 100 DS:[SI] 101 DS:[DI] 110 SS:[BP] 111 DS:[BX] LENGUAJE DE MQUINA FORMA BSICA
Ejemplo: MOV DL,[DI]
Se escribe como: 10001010 = 8Ah, seguido del byte: 00010101= 15h. Ejemplo: cdigo: 10001011 = 8Bh, seguido del byte: 11101100 = ECh. Corresponde a la instruccin MOV BP,SP Ejemplo: MOV DL,[DI+1000h] Se escribe en lenguaje de mquina cmo 8Ah, 85h, 00h, 01h. LENGUAJE DE MQUINA FORMA BSICA
Un modo de direccionamiento especial es el modo de
direccionamiento directo para el cual se utiliza para MOD = 00 y para R/M = 110. Esta excepcin se explica por el hecho que el uso del registro puntero base BP slo puede usarse con desplazamiento. Como MOD=00 le impide este desplazamiento, entonces se trata del modo de direccionamiento directo. LENGUAJE DE MQUINA CASO INMEDIATO
El modo de direccionamiento inmediato posee su
propio formato y su propio cdigo de operacin.
Por ejemplo, MOV SI, 2233h se escribe como:
BE = 10111110 , 33 = 00110011, 22 = 00100010 PROGRAMAS CON DEBUG Ejecutar el programa Ejecutar el programa paso a paso y comprobar paso a paso y comprobar cada transferencia: cada transferencia: mov ax, 1234 mov bx, 2040 mov bx, 0200 push bx mov si, 0020 mov ax, 1234 mov cx, ax pop ax mov dx, [bx] int 20 mov [bx+si], cx La ltima instruccin mov di, [bx+22] devuelve el control al int 20 sistema operativo PROGRAMAS CON DEBUG C:\>debug -n one.com -l -u 100 109 0D80:0100 B80600 MOV AX,0006 0D80:0103 BB0400 MOV BX,0004 0D80:0106 01D8 ADD AX,BX 0D80:0108 CD20 INT 20 -n one.com ; se usa para nombrar el programa -l ; cargar el programa -u 100 109 ; lista el programa en lenguaje de mquina PROBLEMAS PROPUESTOS: 1 1. Determinar el modo de direccionamiento de cada una de las siguientes instrucciones: MOV DX, 1234H MOV [BX + SI + 100h], BX MOV CL, [BX + DI + 01h] MOV [579AH], CX MOV DX, [BX] MOV AX, [BX + 2] MOV CX, [0104H] ADD AX, DX MOV [BX + 6], AX PROBLEMAS PROPUESTOS: 2 2. Considerar el siguiente conjunto de instrucciones en lenguaje ensamblador: MOV [SI + 200H], BX MOV [BX + DI + 120H], AX MOV [BX], CL ADD CH, CL PUSH AX POP DX Considerar los registros: CS = 1000H IP = 0100H AX = 2030H DS = 2000H DI = 0200H BX = 4050H ES = 3000H SI = 0300H DX = 6070H SS = 4000H SP = 0400H CX = 8090H F = 56F0H BP = 0500H PROBLEMAS PROPUESTOS: 2 Se pide: a. Traducir a lenguaje de mquina cada instruccin y escribir las instrucciones en la memoria principal. b. Indicar el contenido de los registros, incluyendo el registro de estado, al trmino de la ejecucin de este conjunto de instrucciones y agregar el modo de direccionamiento de cada una de las instrucciones. PROBLEMAS PROPUESTOS: 3 3. Considerar el siguiente programa en lenguaje ensamblador que incluye algunas etiquetas como mycode, mydata, stack, las que representan nmeros de 2 bytes. ASSUME CS: mycode, DS: mydata, SS: stack PUSH DS PUSHA SUB AX, AX MOV AX, mydata MOV DS, AX MOV BX, 0100H MOV AX, [BX] ADD AX, [BX + 2] ADD AX, [BX + 4] PROBLEMAS PROPUESTOS: 3 MOV [BX + 6], AX POPA HLT Se pide: a. Describir qu es lo que hace esta fraccin de programa b. Deducir el modo de direccionamiento de cada instruccin. c. Traducir a lenguaje de mquina este programa con la informacin que se adjunta.