Download MOV (copiar)
Document related concepts
no text concepts found
Transcript
MICROPROCESADORES Y CONTROL DE PERIFÉRICOS INSTRUCCIONES Y LENGUAJES Prof. Juan Álvarez CONTENIDO • • • • Repertorio de Instrucciones Modos de Direccionamiento Lenguaje de Máquina Programas con Debug REPERTORIO DE INSTRUCCIONES El repertorio de instrucciones de los microprocesadores 8086 y 80286 se agrupan según el tipo de operación que realizan: • De transferencia de datos. • Aritméticas, lógicas, desplazamiento y rotación. • De cadenas. • De manipulación de bits. • De control de programas. • De control de máquina. 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 dirección efectiva), OUT (sacar dato por puerto), IN (ingresar dato por puerto), XLAT (ingresar una tabla de conversión). REPERTORIO DE INSTRUCCIONES Las instrucciones aritméticas son operaciones de la ALU: • ADD (sumar), ADC (sumar con acarreo), SUB (restar), SBB (restar con préstamo), CMP (comparar), DEC (decrementa), INC (incrementa), MUL (multiplicación sin signo), IMUL (multiplicación con signo), DIV (división sin signo), IDIV (división con signo) REPERTORIO DE INSTRUCCIONES Las instrucciones lógicas son también 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 manipulación 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 máquina afectan la operación del procesador: • INT (interrupciones y las hay de variadas formas), HLT (alto), LOCK (bloquear el bus), NOP (no operación), ESC (transmitir información al coprocesador), WAIT (esperar que acabe el coprocesador. MODOS DE DIRECCIONAMIENTO En los microprocesadores Intel se encuentran varios modos de direccionamiento básicos: • 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 instrucción MOV que es muy sencilla como operación y tiene varios modos. La sintaxis de esta instrucción 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 instrucción 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 dirección que se provee al momento de leer la instrucción. 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 posición del dato en la memoria es la suma del contenido de un registro puntero con un número 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 más un número offset. Ejemplo: MOV AX, [BX + SI + 0020h] la suma de BX con SI con 0020h es la posición 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 tamaño del operando. En procesadores Intel posteriores aparecerán nuevos modos de direccionamiento con opciones de transferencia memoria - memoria o memoria - inmediato. • Destino y fuente deben tener el mismo tamaño. Si en el destino o en la fuente se encuentra un registro, entonces el tamaño del operando debe corresponder al tamaño del registro. MODOS DE DIRECCIONAMIENTO • Un dato mayor de un byte se escribe en la memoria en varias posiciones consecutivas: el byte más significativo va en la dirección más grande y el byte menos significativo, en la menor. Por ejemplo: En la instrucción MOV AX, 5734h seguido de MOV [0100h], AX , el dato a escribir en la memoria es: 0100 34 Byte menos significativo 0101 57 Byte más significativo Al leer de la memoria, el dato mayor de un byte tiene también la misma disposición. LENGUAJE DE MÁQUINA El lenguaje de máquina es el código binario que el microprocesador utiliza para identificar instrucciones y controlar su funcionamiento. En los procesadores Intel, la longitud de las instrucciones del lenguaje de máquina puede variar desde 1 hasta 13 bytes. Para los procesadores de 16 bits la estructura de las instrucciones en lenguaje de máquina varía según el modo de direccionamiento. LENGUAJE DE MÁQUINA Para los Modos de Direccionamiento de Registro o los que posicionan memoria, el formato es: LENGUAJE DE MÁQUINA Para el Modo de Direccionamiento Inmediato el formato es: A veces el código de operación se escribe con más de un byte. LENGUAJE DE MÁQUINA – FORMA BÁSICA El código de operación elige la operación que realiza el microprocesador. Generalmente es de un byte y contiene la siguiente información: Código operación 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 MÁQUINA – FORMA BÁSICA LENGUAJE DE MÁQUINA – FORMA BÁSICA 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 MÁQUINA – FORMA BÁSICA TABLA PARA EL CAMPO MOD MOD función 00 Usa memoria sin desplazamiento (offset) 01 Usa memoria con un desplazamiento de 8 bits con signo (offset) Usa memoria con un desplazamiento de 16 bits con signo (offset) 10 11 El campo R/M es un registro. Sólo para el modo de direccionamiento de registro. LENGUAJE DE MÁQUINA – FORMA BÁSICA LENGUAJE DE MÁQUINA – FORMA BÁSICA TABLA PARA EL CAMPO REG Código 000 001 010 011 100 101 110 111 W=0 AL CL DL BL AH CH DH BH W=1 AX CX DX BX SP BP SI DI LENGUAJE DE MÁQUINA – FORMA BÁSICA TABLA PARA EL CAMPO DE R/M Código Direccionamiento 000 DS:[BX+SI] 001 DS:[BX+DI] 010 SS:[BP+SI] 011 SS:[BP+DI] 100 DS:[SI] 101 DS:[DI] 110 SS:[BP] 111 DS:[BX] LENGUAJE DE MÁQUINA – FORMA BÁSICA Ejemplo: MOV DL,[DI] Se escribe como: 10001010 = 8Ah, seguido del byte: 00010101= 15h. Ejemplo: código: 10001011 = 8Bh, seguido del byte: 11101100 = ECh. Corresponde a la instrucción MOV BP,SP Ejemplo: MOV DL,[DI+1000h] Se escribe en lenguaje de máquina cómo 8Ah, 85h, 00h, 01h. LENGUAJE DE MÁQUINA – FORMA BÁSICA 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 excepción se explica por el hecho que el uso del registro puntero base BP sólo puede usarse con desplazamiento. Como MOD=00 le impide este desplazamiento, entonces se trata del modo de direccionamiento directo. LENGUAJE DE MÁQUINA – CASO INMEDIATO El modo de direccionamiento inmediato posee su propio formato y su propio código de operación. Por ejemplo, MOV SI, 2233h se escribe como: BE = 10111110 , 33 = 00110011, 22 = 00100010 PROGRAMAS CON DEBUG Ejecutar el programa paso a paso y comprobar cada transferencia: mov ax, 1234 mov bx, 0200 mov si, 0020 mov cx, ax mov dx, [bx] mov [bx+si], cx mov di, [bx+22] int 20 Ejecutar el programa paso a paso y comprobar cada transferencia: mov bx, 2040 push bx mov ax, 1234 pop ax int 20 La última instrucción devuelve el control al 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 máquina 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 máquina cada instrucción y escribir las instrucciones en la memoria principal. b. Indicar el contenido de los registros, incluyendo el registro de estado, al término de la ejecución 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 números 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 fracción de programa b. Deducir el modo de direccionamiento de cada instrucción. c. Traducir a lenguaje de máquina este programa con la información que se adjunta.