ESTRUCTURA DE MICROPROCESADORES 8086: Instrucciones y Modos de direccionamiento Profesor Ing. Johan Carvajal Godínez JCG 2010 Agenda de la clase • Definición • Diseño de instrucciones 8086 • Modos de direccionamiento 8086 • Set de Instrucciones 8086 JCG-2009 Definición • Conjunto de instrucciones: es la parte de la arquitectura del microprocesador relacionada a la programación del dispositivo. El conjunto de instrucciones también describe: – Tipos de datos que se pueden manejar – Lista instrucciones que se pueden ejecutar – Registros disponibles para programador – Modos de direccionamiento – Manejo de excepciones – Manejo de I/O – Códigos de operación (op-codes) JCG-2009 Diseño del set de instrucciones • Compilación del set de instrucciones –Decodificación por hardware • Estructuras “Hard wired” –Decodificación por tablas • Memorias utilizadas para generar opcodes • Más flexible JCG-2009 Micro arquitectura vs. ISA • Microarquitectura es la manera en que se implementan a nivel de hardware el set de instrucciones. – Un mismo set de instrucciones se puede implementar físicamente diferente: Diferentes microarquitecturas puedes soportar mismo set instrucciones • Ejemplo: X86 Intel vs. X86 AMD JCG-2009 Densidad del código • Es una característica que describe la forma en la instrucción se codifica para realizar una o múltiples funciones con una sola directriz – CISC • Soporta programación de “alto nivel” • Integra modos de direccionamiento complejos • Tamaño de memoria de código se reducía • Arquitectura compleja de implementar en HW – RISC • Instrucciones simplificadas y de largo constante • Orientada a Microarquitectura “pipelined” • Favorece el procesamiento distribuido – “CRISC” • Instrucciones CISC que se convierten en secuencias RISC • Unidades de decodificación dividen las instrucciones CISC – MISC • Múltiples instrucciones simples empaquetadas en un código • Implementaciones de hardware muy sencillas, muy difícil compilar. JCG-2009 Construccion del lenguaje maquina X86 • Se construye a partir de las directrices del programa: Instrucciones • El primer byte representa OpCode – Cada OpCode se asocia a una operación • Los bytes adicionales son los que especifican fuente de datos para operación, destino de resultado, etc JCG-2009 Instrucciones de formato variable X86 • El significado de los bits varía de instrucción a instrucción • La longitud del micro código es variable de acuerdo al tipo de instrucción • Formato de instrucción básico para 8086 Byte bajo Opcode Byte alto d w mod reg r/m Parte baja desplazamiento Parte alta desplazamiento Parte Baja dato Parte alta dato JCG-2009 Códigos digos de operación operaci n Opcode d w • Los códigos de operación para 8086 miden 6, 7, o 8 bits – Bit de dirección – lo usan las instrucciones que codifican un registro como uno de sus operandos. • 1 = el registro es destino, 0 = el registro es fuente – Bit de ancho – se usa para distinguir el largo del operando a ser manipulado. • Valor = 0 byte, / Valor = 1 Word • Las operaciones de 7 bits no usan bit de dirección • Las operaciones de 8 bits no usan ni bit de dirección ni bit de ancho JCG-2009 mod/reg/r/m mod reg r/m • El segundo byte de algunas instrucciones se divide en tres campos – reg+ Bit W (en el byte de OpCode): especifica el registro a ser utilizado • Si la operación solo especifica un registro operando, el bit d especifica si el registro es destino o es fuente. • Si la operación necesita dos operandos el campo reg especifica el registro destino. JCG-2009 reg reg 000 001 010 011 100 101 110 111 w=1 AX CX DX BX SP BP SI DI w=0 AL CL DL BL AH CH DH BH •reg (3 bits) contiene un valor entre 0 y 7 •Según sea el valor de W, se selecciona uno de los ocho registros como un operando usado por las instrucción JCG-2009 r/m • r/m (3 bits) se interpreta según el valor del campo mod (2 bits) – mod = 11r/m=(mismo código que reg) • El segundo operando es el registro especificado – mod = 00 r/m=110 • El segundo argumento es una dirección especificada en los siguientes dos bytes de instrucción: “direct near addressing”DS:offset JCG-2009 mod/r/m •Cualquier otra mod r/m mode combinación especifica 00 110 direct direccionamiento 00 --- no disp Indirecto. 01 all byte disp –Target Address = [BX/BP]+[SI/DI] + 10 all word disp disp 11 all register –Mod especifica el (ver tabla adelante) tamaño del desplazamiento que se codifica en los siguientes uno-dos bytes de la instrucción JCG-2009 Modos de direccionamiento indirecto r/m 000 001 010 011 100 101 110 111 seg DS DS SS SS DS DS SS DS addr BX+SI BX+DI BP+SI BP+DI SI DI BP BX •si mod = 01 o 10 –Se agrega desplazamiento •si mod = 00 –no hay desplazamiento •Excepción: mod = 00 y r/m = 110 –Se usa direccionamiento directo por medio de DS y un offset de 16 bits JCG-2009 Ejemplo de código c digo de maquina 0000 0002 000A 00 0000 0002 0004 0008 000C 000E 0011 0015 0018 001A 0020 8B 8A 8B 8A 8B A0 8A BB B1 C7 C6 DF F9 1E 0000 26 0002 12 0002 R 26 0002 0003 03 06 0000 06 0002 R R R R 0064 R FF JCG-2009 a dw 10 b db ? .code mov bx,di mov bh,cl mov bx,a mov ah,b mov dx,[si][bp] mov al,b mov ah,b mov bx,3 mov cl,3 mov a,100 mov b,255 Modos de direccionamiento Se emplea la instrucción MOV para manejo en cualquiera de los modos de direccionamient MOV AX , BX o d e s tin o JCG-2009 o rig e n Desarrollo de modos de direccionamiento -Durante el inicio de la era del micro, se consideraba que una mayor cantidad de modos de direccionamiento era más beneficioso para el programador -Esto es cierto para implementaciones totalmente desarrolladas en ensamblador, pero no para aquellas generadas por compiladores JCG-2009 Direccionamiento por registo Tranfiere una copia de un byte o palabra de un registro al registro o posición de memoria destino MOV AX , BX d e s tin o o r ig e n Re g is tro BX Re g is tro AX o r ig e n d e s tin o JCG-2009 Direccionamiento inmediato Transfiere un dato inmediato al registro o posición de memoria destino MOV CH , 3 AH d e s tin o o r ig e n 3 AH Re g is t ro AX o r ig e n d e s tin o JCG-2009 Direccionamiento directo Mueve un byte o palabra entre una posición de memoria y un registro MOV [1 2 3 4 ], AX d e s tin o o r ig e n FFFFF DS*1 0 H+ DISP 1 0 0 0 0 H+ 1 2 3 4 H Me m o r ia 12 34H 00 000 Re g is tro AX o rig e n JCG-2009 d e s t in o Direccionamiento de registro indirecto Mueve un byte o palabra entre una posición de memoria y un registro [BX] , CL MOV d e s tin o o r ig e n FFFFF Me m o r ia Re g is tro CL 10 300 H o r ig e n 00 000 d e s tin o DS*1 0 H+ BX 1 0 0 0 0 H+ 3 0 0 H Re g is tro BX= 0300H JCG-2009 Direccionamiento de base má ás índice Mueve un byte o palabra entre registro y una posición de memoria Re g is tro SP o r ig e n MOV [BX+ SI], SP d e s tin o o r ig e n FFFFF Re g is tro BX= 0300H Me m o ria 10 500 H Re g is tro SI= 0200H 00 000 DS*1 0 H 10000H d e s tin o Cá lc u lo d ire c c ió n JCG-2009 Direccionamiento de registro relativo Mueve un byte o palabra entre una posición de memoria y un registro MOV CL , [BX+ 4 ] d e s tin o o r ig e n FFFFF Re g is t ro CL Me m o r ia 10 304 H Re g is t ro BX= 0300H 00 000 O r ig e n 4 DS*1 0 H 10000H Cá lc u lo d ire c c ió n JCG-2009 d e s t in o Direccionamiento base relativa+ índice Mueve un byte o palabra entre un registro y una posición de memoria MOV ARRAY[BX+ SI] , DX d e s tin o o r ig e n FFFFF Re g is tro DX 11 500 H Re g is tro BX= 0300H d e s tin o Me m o r ia 00 000 Or ig e n ERROR Re g is tro SI= 0200H ARRAY= 1 0 0 0 H DS*1 0 H 10000H Cá lc u lo d ire c c ió n JCG-2009 Tipos de Instrucciones 8086 • Transferencia de Datos – – – – Generales mov ax, [DAT1] ;ax obtiene un valor de mem Cadenas cmpsb ;si DS:SI=ES:DI entonces ZF=1 Propósito especial chg ax, bx ;intercambio de valores Entrada-Salida • Aritmético-Lógicas – – – – – Enteros add ax, bx ;ax tendrá ax+bx ASCII, BCD aaa ;cambia ASCII # a entero Punto flotante fadd DAT ;ST obtiene ST+DAT Lógicas and ax, bx ;ax obtiene ax AND bx Desplazamiento ror ax, 2 ;ax tendrá shifted-2 right • Control de Flujo – – – – – – jnz LABEL1 Saltos Interrupción int 21h Subrutina call SUB1 Modificar Banderas cli Congelar operación hlt No Operación nop JCG-2009 ;if ZF=1 then IP=LABEL1 ;llama Interrupción 21h ;llama subrutina, SUB1 ;si es zero ;congela la operación ; no hace nada Listado de instrucciones 8086/8088 AAA, AAD, AAM, AAS, ADC, ADD, AND CALL, CBW, CLC, CLD, CLI, CMC, CMP, CMPS, CMPXCHG CWD, DAA, DAS, DEC, DIV, ESC, HLT, IDIV IMUL, IN, INC, INT, INTO, IRET/IRETD Jxx, JCXZ/JECXZ, JMP LAHF, LDS, LEA, LES, LOCK, LODS, LOOP MOV, MOVS, LOOPE/LOOPZ, LOOPNZ/LOOPNE MUL, NEG, NOP, NOT, OR, OUT, POP, POPF/POPFD, PUSH RCL, RCR, PUSHF/PUSHFD REP, REPE/REPZ, RET/RETF, REPNE/REPNZ ROL, ROR, SAHF, SAL/SHL, SAR, SBB, SCAS, SHL, SHR STC, STD, STI, STOS, SUB TEST, WAIT/FWAIT, XCHG, XLAT/XLATB, XOR 79 Instrucciones JCG-2009 Instrucciones de transferencia de datos –Transfieren datos en forma de bytes, palabras o dobles palabras (en arquitecturas más modernas). JCG-2009 Instrucciones de transferencia de datos IN LAHF LEA LDS LES MOV OUT POP POPF PUSH PUSHF SAHF XCHG XLAT Mete dat os al acum ulador desde una I/O Carga banderas en AH Carga la dirección efectiva Carga DS y registro de 16 bits con los datos de m em oria de 32 bits Carga ES y registro de 16 bit s con los dat os de m em oria de 32 bits Carga byte, palabra Saca dat os del acum ulador a un E/S Recupera una palabra de la pila Recupera los indicadores de la pila Salva las palabras en la pila Salva banderas en la pila Carga AH en las banderas Intercam bia byt es y palabras Em plea AL para entrar a una tabla de conversión JCG-2009 Instrucciones para cadenas FFFFF –Se utilizan para manipular cadenas de datos en memoria. Estas pueden ser de bytes o palabras, de hasta 64 kB de longitud 30 000 2 FFFF –Utilizan los registros SI y DI para direccionar datos, y el CX para contar los bytes o palabras trabajados. 20 000 1 FFFF 10 000 0 FFFF 00 000 JCG-2009 Instrucciones para cadenas CMPS LODS MOVS SCAS STOS Com paración entre m em oria y m em oria Cargar el acum ulador Mover de m em oria a m em oria Com paración entre m em oria y acum ulador Alm acenar en el acum ulador FFFFF 30 000 2 FFFF 20 000 1 FFFF 10 000 0 FFFF JCG-2009 00 000 Instrucciones aritmé éticas y ló ógicas –Los 8086 pueden: –-Sumar –-Restar –-Multiplicar –-Dividir –-AND, OR, TEST –Datos como bits, bytes, palabras (dobles palabras en 386) JCG-2009 + Instrucciones aritmé éticas AAA AAD AAM AAS ADD ADC CBW CMP DAA DAS DEC DIV IDIV IMUL INC MUL NEG SBB SUB Ajuste ASCII para sum a Ajuste ASCII antes para división Ajuste ASCII para m ultiplicación Ajuste ASCII para rest a Sum a dat os entre regist ros o la m em y ot ro reg Sum a dat os con la bandera de acarreo Conviert e byte a palabra Com para los dat os Ajuste decim al de AL después de la sum a de BCD Ajuste decim al de AL después de una rest a BCD Decrem ent ación División sin signo División con signo Mult iplicación con signo Increm enta Mult iplicación sin signo Cam bia el signo Sum a con acarreo Rest a dat os entre registros o la m em y otro reg + JCG-2009 Instrucciones ló ógicas –Se utilizan para la manipulación de datos al nivel de bits. Incluyen operaciones lógicas, corrimientos y rotaciones. JCG-2009 Instrucciones ló ógicas AND NOT OR SAR SHL/SAL SHR RCL ROL RCR ROR TEST XOR Y lógica Invert ir O lógica Corrim ient o arit m ét ico a la derecha Corrim ient o a la izquierda Corrim ient o lógico a la derecha Rot ación a la izquierda con acarreo Rot ación a la izquierda Rot ación a la derecha con acarreo Rot ación a la derecha con acarreo Operación con el AND lógico, solo afect a banderas O exclusivo JCG-2009 Suma: modos de direccionamiento Inst rucción ADD AL,BL ADD CX,DI ADD CL,44H ADD [ BX],AL ADD CL,[BP] ADD BX,[ SI+ 2] ADD CL,TEMP Operación AL= AL+ BL CX= CX+ DI CL= CL+ 44H La posición de m em oria direccionada por BX contendra el valor alm acenado ahí sum ado al valor del regist ro AL En el registro CL se alm acenara el valor de dicho regist ro m ás el valor de la posición direccionada por BP Alm acena en BX su valor m ás el valor direccionado por el registro SI con un desplazam ient o de 2 Alm acena en CL la sum a de su valor m ás el valor en el segm ent o de dat os direccionado por TEMP En un ISA CISC, esta operación por ser tan común, cuenta con diversos modos de direccionamiento JCG-2009 Efecto de operaciones aritmé ética en FR 15 14 13 12 11 10 9 8 7 6 0 D I T S Z 5 4 A 3 2 P 1 0 C Siempre que se ejecutan instrucciones lógicas y aritméticas, se modifica el contenido del registro de banderas JCG-2009 Suma de incremento Inst rucción INC BL INC BYTE PTR[ BX[ INC DATOS Operación BL= BL+ 1 Increm ent a en uno la posición direccionada por la posición direccionada por BX Increm ent a en 1 la posición de dat os et iquet ada com o DATOS La operación INC suma 1 a un registro o a una posición de memoria, pero no a un registro de segmento. JCG-2009 Suma con acarreo (ADC) Instrucción Operación ADC AL,AH AL= AL+ AH+ acarreo ADC DH,[BH] DH= DH+ posición direccionada por BH+ acarreo AL AH 15 14 13 12 11 10 9 8 7 6 0 D I T S Z 5 Σ 4 A 3 2 P 1 0 C La suma con acarreo suma el bit de bandera de acarreo con los datos del operando. Se usa para operaciones de suma de más de 16 bits JCG-2009 Resta Ejem plo SUB CL,BL SUB CL,44H DEC BH SBB AH,AL Tipo Resta registros Resta inm ediata Decrem ento Resta con acarreo (acarreo se resta) La resta pueden utilizar igualmente cualquier modo de direccionamiento JCG-2009 Multiplicació ón Existe instrucción específica para realizar multiplicación con signo (IMUL) y sin signo (MUL) Desbordamiento (O) y acarreo (C) pueden modificarse en la operación JCG-2009 AL * CL Multiplicació ón de 8 bits El multiplicando siempre se encuentra en AL, sin importar si es hecha o n o con signo MUL CL AL El producto de doble anchura se coloca en AX JCG-2009 * CL AX Multiplicació ón de 16 bits El multiplicando siempre se encuentra en AX, sin importar si es hecha o n o con signo MUL BX AX MSB * El producto de doble anchura se coloca en DX:AX BX JCG-2009 DX LSB AX Divisió ón Con signo (IDIV) o sin signo (DIV). El operando simpre tiene el doble de anchura que el divisor Instrucción Operación DIV CL DIV CX AL= AX/CL ; AH= AX MOD CL AX= DX:AX/CX ; DX= DX:AX MOD CX Se utilizan los registros AX, o DX-AX como operando JCG-2009 Instrucciones ló ógicas bá ásicas El ISA contien las instrucciones: -AND -OR -XOR -NOT -TEST (forma especial de AND) Se pueden usar los mismos módos de direccionamiento que las instrucciones aritméticas JCG-2009 Instrucció ón de prueba de bits (TEST) Realiza una operación AND pero modifica únicamente las banderas, no los registros. Típicamente usada para evaluaciones inmediatas TEST AL,4 2 JNZ L1 . . . L1: --- JCG-2009 ; Evalua bit Control de Flujo Incluyen saltos, procedimientos e interrupciones y operaciones de retorno a d d a ,b ca ll x . . x: xo r x,y . JCG-2009 Control de Flujo INT INT 3 INTO IRET JA JAE JB JBE JC JE/JZ JG JGE JL Int errum pir Int errupción t ipo 3 Int errupción por sobreflujo Ret orno de int errupción Brinca si es m ayor Brinca si es m ayor o igual Brinca si es m enor Brinca si es m enor o igual Brinca si hay acarreo Brinca si es igual o salt ar si es cero Brinca si es m ayor que Brinca si es m ayor o igual Brinca si es m enor que JCG-2009 a d d a ,b ca ll x . . x: xo r x,y . Control de Flujo JLE JMP JNC JNE/JNZ JNO JNP JNS JO JP JS LOOP LOOPE LOOPNE JCXZ RET Brinca si es m enor o igual Brinca a ot ra part e del program a Brinca si no hay acarreo Brinca si no es igual o si no es cero Brinca si no hay desbordam ient o Brinca si no t iene paridad Brinca si no es signo posit ivo Brinca si hay desbordam ient o Brinca si hay paridad (par) Brinca si t iene signo Repit e el ciclo CX veces Form ar ciclo m ient ras sea igual Form ar ciclo m ient ras no sea igual Brinca si CX= 0 Ret orna de un procedim ient o JCG-2009 a d d a ,b ca ll x . . x: xo r x,y . Operaciones con banderas -Habilitan y deshabilita interrupciones -Modifican los bits de Bandera -Sincronizan los eventos externos 15 14 13 12 11 10 0 D 9 8 7 6 I T S Z JCG-2009 5 4 A 3 2 P 1 0 C Instrucciones con banderas ARPL CLCL CLD CLI CMC CTS ESC HLT LAR LGDT LIDT LLDT LOCK LSL Ajust e grado solicit ado de privilegio Borrar bandera de acarreo Habilit ar increm ent o aut om át ico Deshabilit ar t erm inal INTR Com plent a bandera de acarreo Borra bandera de conm ut ación t area Inst rucción para el coprocesador Alt o hast a que se reinicialice o exist a INT Carga derechos de acceso Carga regist ros de t abla de descript ores globales Carga t abla de regist ros descript ores de INT Carga t abla de regist ros descript ores locales Cont rola la t erm inal LOCK del 8086 Carga lím it e de segm ent o 15 14 13 12 11 10 9 0 D I T S Z JCG-2009 8 7 6 5 4 A 3 2 P 1 0 C Operaciones con Banderas LTR NOP SGDT SIDT SLDT STC STD STI STR VERR VERW WAIT 15 Carga regist ro de t area No operación Alm acena t abla de regist ros de descript ores globales Alm acena t abla de regist ros de descript ores int errup. Alm acena t abla de regist ros de descript ores locales Act iva bandera de acarreo Seleccionar m odo de decrem ent o aut om át ico Habilit ar int errupciones Alm acenar regist ro de t area Verificar acceso para lect ura Verificar acceso para escrit ura Espera a que la t erm inal TEST= 0 14 13 12 11 10 0 D 9 8 7 6 I T S Z JCG-2009 5 4 A 3 2 P 1 0 C Instrucciones de desplazamiento Inst rucción SHL AX,1 SHR BX,12 SAL DATOS1,CL SAR SI,2 Función Desplazam iento Desplazam iento Desplazam iento Desplazam iento lógico a la izquierda 1 posición lógico a la derecha 12 posiciones aritm ético izquierda CL posiciones aritm ético derecho 2 posiciones JCG-2009 Comparació ón (CMP) CMP AL,10H JA ETIQUETA Se trata de una resta que solo cambia los bits de bandera Usualmente se usa con los saltos condicionales JA (salto si es mayor) o JB (salto si es menor) JCG-2009 Comparació ón de cadenas SCAS MOV DI, OFFSET_DATA CLD MOV CX,100 XOR AL,AL REPNE SCASB ; localiza un cero en el string Esta instrucción compara AL o AX con un bloque de bytes o palabras. El segmento es direccionado por DI Con cualquier prefijo de repetición (REPNE,REPE) CX se decrementa hasta terminar de repetir JCG-2009 Comparació ón de cadena a cadena CMPS MOV SI, OFFSET_LISTA MOV DI, OFFSET_TABLA CLD MOV CX,10 REPE CMPSB Esta instrucción compara el bloque direccionado con SI con un bloque direccionado por DI Con cualquier prefijo de repetición (REPNE,REPE) CX se decrementa hasta terminar de repetir Ejemplo: comparar hasta que no sean iguales JCG-2009 Operaciones típicas (1) Las operaciones pueden ser a nivel de BYTE (8), WORD(16) y DWORD(32) JCG-2009 Multiplicación y división de enteros Los operandos deben ser registros u operandos de memoria JCG-2009 FIN JCG-2009