EMU 8086: Instrucciones Edwin Rodríguez Noviembre 20, 2017. Universidad de las Fuerzas Armadas “ESPE” Departamento de
Views 112 Downloads 51 File size 4MB
EMU 8086: Instrucciones
Edwin Rodríguez Noviembre 20, 2017.
Universidad de las Fuerzas Armadas “ESPE” Departamento de la Eléctrica y Electrónica Microcontroladores y Microprocesadores
Instrucciones 1. AAA Ajusta el Resultado en AX luego de una suma a valores BCD. Ocupa 1 Byte
2. AAD Ajusta los valores dentro del registro en BCD preparándolos para la división en HEX. Ocupa 1 Byte
3. AAM Ajusta los valores del registro luego de una multiplicación dejando en AH las decenas y en AL las unidades. Ocupa 2 Bytes de memoria
4. AAS
Corrije los valores luego de una resta cuando el registro presenta overflow para números negativos al trabajar con BCD. Ocupa 1 Byte de memoria
5. ADC Suma adicionando la bandera de Carry CF. Ocupa 2 Bytes de memoria
6. ADD Suma 2 operandos y los almacena en el primer argumento de la función. Ocupa 2 Bytes de memoria
7. AND
Representa y opera como la operación lógica AND entre 2 operandos, almacenando el resultado en el primero de ellos. Ocupa 2 Bytes de memoria
8. CALL Hace el llamado a otro procedimiento dejando en pila el puntero de código IP. Ocupa 3Bytes de memoria
9. CBW Convierte un valor HEX (Byte) del registro a un dato tipo palabra. Ocupa 1 Byte de memoria
10. CLC Limpia el valor asignado a la bandera de Carry CF. Ocupa 1 Byte de memoria
11. CLD Limpia banderas de dirección. Los punteros SI y DI serán incrementados también por las instrucciones de cadena. Ocupa 1 Byte de memoria
12. CLI Limpia la bandera de interrupciones, deshabilitando interrupciones de hardware. Ocupa 1 Byte de memoria
13. CMC Invierte el valor actual de la bandera de Carry. Ocupa 1 Byte de memoria
14. CMP Compara 2 operandos, estableciendo las banderas OF, SF, ZF, AF, PF, CF, según el resultado. Ocupa 2 Bytes de memoria
15. CMPSB Compara Bytes de los operandos ES y DS y establece las banderas OF, SF, ZF, AF, PF, CF, según el resultado. Ocupa 1 Byte de memoria
16. CMPSW Compara las palabras de los operandos ES y DS y establece las banderas OF, SF, ZF, AF, PF, CF, según el resultado. Ocupa 1 Byte de memoria
17. CWD Convierte un dato de tipo WORD a un Double Word. Ocupa 1 Byte de memoria
18. DAA Ajuste decimal luego de la adición. En lugar de establecer en AH el valor de la decena y en AL la unidad, ajusta en AL todo el numero. Ocupa 1 Byte de memoria
19. DAS Ajuste decimal luego de la sustracción. En lugar de establecer en AH el valor de la decena y en AL la unidad, ajusta en AL todo el número. Ocupa 1 Byte de memoria
20. DEC Decrementa en 1 el operando presente. Ocupa 1Byte de memoria
21. DIV Divide 2 valores sin signo, el único operando que se ingresa con AL. Ocupa 2 Bytes de memoria
22. HLT Detiene el sistema y con él la ejecución del programa. Ocupa 1 Byte de memoria
23. IDIV. Realiza la división entre 2 valores con signo guardando en AL el cociente y en AH el residuo. Ocupa 2 Bytes de memoria
24. IMUL Realiza la multiplicacion entre 2 valores con signo guardando en AX el resultado. Ocupa 2 Bytes de memoria. Ocupa 2 Bytes de memoria
25. IN Guarda una entrada en AL o AX por el puerto indicado. Ocupa 2 Bytes de memoria.
26. INC Incrementa el operando en 1. Ocupa 1 Byte de memoria.
27. INT Hace el llamado a la interrupción numerada de 0 a 255. Ocupa 2 Bytes de memoria
28. INTO Hace el llamado a la interrupción 4 en caso de presentarse un overflow. Ocupa 1 Byte de memoria.
29. IRET Retorno por Interrupción. Realiza un POP a las banderas de registro, IP y CS. Ocupa 1 Byte de memoria
30. JA Realiza un salto si luego de la operación CMP el primer operando fue mayor al segundo. Ocupa 2 Bytes de memoria
31. JAE Realiza un salto si luego de la operación CMP el primer operando fue mayor o igual al segundo. Ocupa 2 Bytes de memoria
32. JB Realiza un salto si luego de la operación CMP el primer operando fue menor al segundo. Ocupa 2 Bytes de memoria
33. JBE Realiza un salto si luego de la operación CMP el primer operando fue menor o igual al segundo. Ocupa 2 Bytes de memoria
34. JC Realiza un salto si la bandera de carry es 1. Ocupa 2 Bytes de memoria
35. JCXZ Realiza un salto si el registro CX es 0. Ocupa 2 Bytes de memoria.
36. JE Realiza un salto si luego de la operación CMP el primer operando fue igual al segundo. Ocupa 2 Bytes de memoria
37. JG Realiza un salto si luego de la operación CMP el primer operando fue mayor al segundo. Ocupa 2 Bytes de memoria
38. JGE Realiza un salto si luego de la operación CMP el primer operando fue mayor o igual al segundo. Ocupa 2 Bytes de memoria
39. JL Realiza un salto si luego de la operación CMP el primer operando fue menor al segundo. Ocupa 2 Bytes de memoria
40. JLE Realiza un salto si luego de la operación CMP el primer operando fue menor o igual al segundo. Ocupa 2 Bytes de memoria
41. JMP Realiza un salto sin necesitar de ninguna condición que se cumpla. Ocupa 2 Bytes de memoria
42. JNA Realiza un salto si luego de la operación CMP el primer operando no estaba sobre el segundo. Ocupa 2 Bytes de memoria
43. JNAE Realiza un salto si luego de la operación CMP el primer operando no estaba sobre ni era igual al segundo. Ocupa 2 Bytes de memoria
44. JNB Realiza un salto si luego de la operación CMP el primer operando no era menor al segundo. Ocupa 2 Bytes de memoria
45. JNBE Realiza un salto si luego de la operación CMP el primer operando no era menor ni igual al segundo. Ocupa 2 Bytes de memoria
46. JNC Realiza un salto si la bandera de carry no es 1. Ocupa 2 Bytes de memoria
47. JNE Realiza un salto si luego de la operación CMP el primer operando no es igual al segundo. Ocupa 2 Bytes de memoria
48. JNG Realiza un salto si luego de la operación CMP el primer operando no es mayor al segundo. Ocupa 2 Bytes de memoria
49. JNGE Realiza un salto si luego de la operación CMP el primer operando no es mayor ni igual al segundo. Ocupa 2 Bytes de memoria
50. JNL Realiza un salto si luego de la operación CMP el primer operando no es menor al segundo. Ocupa 2 Bytes de memoria
51. JNLE Realiza un salto si luego de la operación CMP el primer operando no es menor ni igual al segundo. Ocupa 2 Bytes de memoria
52. JNO Si no existe overflow, entonces se realiza un salto. Ocupa 2Bytes
53. JNP Realiza un salto si es que el numero no es par según las instrucciones CMP, SUB, ADD, TEST, AND, OR, XOR. Ocupa 2 Bytes
54. JNS Realiza un salto si es que el numero no tiene signo según las instrucciones CMP, SUB, ADD, TEST, AND, OR, XOR. Ocupa 2 Bytes
55. JNZ Realiza un salto si es que el numero no es igual a otro operador según las instrucciones CMP, SUB, ADD, TEST, AND, OR, XOR. Ocupa 2 Bytes
56. JO Realiza un salto si se presenta un overflow en la memoria. Ocupa 2 Bytes
57. JP Realiza un salto si es que el numero es par según las instrucciones CMP, SUB, ADD, TEST, AND, OR, XOR. Ocupa 2 Bytes
58. JPE Realiza un salto si es que el numero es par según las instrucciones CMP, SUB, ADD, TEST, AND, OR, XOR. Ocupa 2 Bytes
59. JPO Realiza un salto si es que el numero es impar según las instrucciones CMP, SUB, ADD, TEST, AND, OR, XOR. Ocupa 2 Bytes
60. JS Realiza un salto si es que el numero es negativo, o tiene signo según las instrucciones CMP, SUB, ADD, TEST, AND, OR, XOR. Ocupa 2 Bytes
61. JZ Realiza un salto si es que el numero es cero según las instrucciones CMP, SUB, ADD, TEST, AND, OR, XOR. Ocupa 2 Bytes
62. LAH Carga a AH con el núero de bits de banderas de registro activas. Ocupa 1 Byte.
63. LDS Carga un dato WORD Doble en el registro indicado y en DS. Ocupa 4 Bytes
64. LEA Carga una dirección efectiva. Ocupa 3 Bytes en memoria.
65. LES Carga un dato WORD Doble en el registro indicado y en ES. Ocupa 4 Bytes
66. LODSB Carga el byte de DS en AL y actualiza el SI. Ocupa 1 Byte en memoria
67. LODSW Carga el valor de un Word de DS en AX y actualiza el SI. Ocupa 1 Byte en memoria
68. LOOP Decrementa CX y salta a dicho segmento de código si CX no es 0 aún. Ocupa 2 Bytes
. 69. LOOPE Decrementa CX y salta a dicho segmento de código si CX hasta ser 0 y la bandera de cero se iguale a 1. Ocupa 2 Bytes
70. LOOPNE Decrementa CX y salta a dicho segmento de código si CX hasta ser 0 y la bandera de cero se iguale a 0. Ocupa 2 Bytes
71. LOOPNZ Decrementa CX y salta a dicho segmento de código para CX hasta ser 0 y la bandera de cero se iguale a 0. Ocupa 2 Bytes
72. LOOPZ Decrementa CX y salta a dicho segmento de código para CX hasta ser 0 y la bandera de cero se iguale a 1. Ocupa 2 Bytes
73. MOV Escribe y guarda un valor determinado en el registro indicado. Ocupa 3 Bytes
74. MOVSB Esccribe el valor de SD en ES. Ocupa 1 Byte
75. MOVSW Escribe el valor de un dato WORD de SD en ES. Ocupa 1 Byte en memoria
76. MUL Realiza la multiplicación de un dato con el valor en AL. Ocupa 2 Bytes
77. NEG Ocupa el complemento a 2 para convertir un número a negativo. Ocupa 2 Bytes
78. NOP No realiza ninguna Operación. Ocupa 1 Byte en memoria
79. NOT Similar a la operación lógica NOT, invierte cada bit de la palabra en el registro. Ocupa 3 Bytes
80. OR Similar a la operación lógica OR entre 2 operandos. Ocupa 2 Bytes
81. OUT Envía a un puerto de salida los datos en AL o AX. Ocupa 2 Bytes de memoria
82. POP Mueve al registro indicado el valor en el stack con el indicador actual. Ocupa 1 Byte en memoria
83. POPA Obtiene y escribe todos los valores de los registros DI, SI, BP, SP, BX, DX, CX, AX con los presentes en la pila. Ocupa 1 Byte
84. POPF Obtiene las banderas de registro de la pila. Ocupa 1 Byte en memoria.
85. PUSH. Guarda el dato de 16 bits de la dirección indicada en la pila. Ocupa 1 Byte de memoria
86. PUSHA Guarda todos los valores de los registros DI, SI, BP, SP, BX, DX, CX, AX presentes, en la pila. Ocupa 1 Byte
87. PUSHF Guarda las banderas
de
registro
en
la
pila.
Ocupa
1
Byte
en
memoria.
88. RCL Rota el operando 1 a la izquierda mediante la bandera de carry. El numero de rotaciones está dado por el operando 2. Ocupa 2Bytes
89. RCR Rota el operando 1 a la derecha segun la bandera de carry. El numero de rotaciones está dado por el operando 2. Ocupa 2 Bytes
90. REP Repite las siguientes instrucciones de MOVSB, MOVSW, LODSB, LODSW, STOSB, STOSW el número de veces indicadas en CX. Ocupa 1 Byte de memoria
91. REPE Repite las siguientes instrucciones de MOVSB, MOVSW, LODSB, LODSW, STOSB, STOSW el número maximo de veces indicadas en CX mientras ZF sea igual a 1. Ocupa 1 Byte de memoria
92. REPNE Repite las siguientes instrucciones de MOVSB, MOVSW, LODSB, LODSW, STOSB, STOSW el número maximo de veces indicadas en CX mientras ZF sea igual a 0. Ocupa 1 Byte de memoria
93. REPNZ Repite las siguientes instrucciones de MOVSB, MOVSW, LODSB, LODSW, STOSB, STOSW el número maximo de veces indicadas en CX mientras ZF sea igual a 0. Ocupa 1 Byte de memoria
94. REPZ Repite las siguientes instrucciones de MOVSB, MOVSW, LODSB, LODSW, STOSB, STOSW el número maximo de veces indicadas en CX mientras ZF sea igual a 1. Ocupa 1 Byte de memoria
95. RET Retorna de un procedimiento. Ocupa 1 Byte de memoria
96. RETF Retorna de un procedimiento mas alejado. Ocupa 1 Byte de memoria
97. ROL Rota un operando a la izquierda el numero que indique el segundo operando. Ocupa 2 Bytes de memoria
98. ROR Rota un operando a la derecha el numero que indique el segundo operando. Ocupa 2 Bytes de memoria
99. SAHF Almacena en AH un valor indicado por el numero de bits de las banderas de registro.