Instrucciones EMU 8086

EMU 8086: Instrucciones Edwin Rodríguez Noviembre 20, 2017. Universidad de las Fuerzas Armadas “ESPE” Departamento de

Views 112 Downloads 51 File size 4MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

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.