Microprocesador: conjuntos de instrucciones 8086

El microprocesador 8086 admite 8 tipos de instrucciones:

  • Instrucciones de transferencia de datos
  • Instrucciones aritméticas
  • Instrucciones de manipulación de bits
  • Instrucciones de cadena
  • Instrucciones de transferencia de ejecución del programa (instrucciones de rama y bucle)
  • Instrucciones de control del procesador
  • Instrucciones de control de iteraciones
  • Instrucciones de interrupción

Analicemos ahora estos conjuntos de instrucciones en detalle.

Instrucciones de transferencia de datos

Estas instrucciones se utilizan para transferir los datos del operando de origen al operando de destino. A continuación se muestra la lista de instrucciones de este grupo:

Instrucción para transferir una palabra

  • MOV - Se utiliza para copiar el byte o la palabra del origen proporcionado al destino proporcionado.

  • PPUSH - Se usa para poner una palabra en la parte superior de la pila.

  • POP - Se usa para enviar una palabra desde la parte superior de la pila a la ubicación proporcionada.

  • PUSHA - Se usa para poner todos los registros en la pila.

  • POPA - Se utiliza para enviar palabras de la pila a todos los registros.

  • XCHG - Se utiliza para intercambiar los datos de dos ubicaciones.

  • XLAT - Se usa para traducir un byte en AL usando una tabla en la memoria.

Instrucciones para la transferencia de puertos de entrada y salida

  • IN - Se utiliza para leer un byte o una palabra desde el puerto proporcionado al acumulador.

  • OUT - Se utiliza para enviar un byte o una palabra desde el acumulador al puerto proporcionado.

Instrucciones para transferir la dirección

  • LEA - Se utiliza para cargar la dirección del operando en el registro proporcionado.

  • LDS - Se utiliza para cargar el registro DS y otros registros proporcionados desde la memoria

  • LES - Se utiliza para cargar el registro ES y otros registros proporcionados desde la memoria.

Instrucciones para transferir registros de banderas

  • LAHF - Se utiliza para cargar AH con el byte bajo del registro de banderas.

  • SAHF - Se utiliza para almacenar el registro AH en el byte bajo del registro de banderas.

  • PUSHF - Se utiliza para copiar el registro de banderas en la parte superior de la pila.

  • POPF - Se usa para copiar una palabra en la parte superior de la pila al registro de banderas.

Instrucciones aritméticas

Estas instrucciones se utilizan para realizar operaciones aritméticas como suma, resta, multiplicación, división, etc.

A continuación se muestra la lista de instrucciones de este grupo:

Instrucciones para realizar la suma

  • ADD - Se utiliza para agregar el byte proporcionado a byte / palabra a palabra.

  • ADC - Se usa para agregar con carry.

  • INC - Se usa para incrementar el byte / palabra proporcionado en 1.

  • AAA - Se utiliza para ajustar ASCII después de la adición.

  • DAA - Se utiliza para ajustar el decimal después de la operación de suma / resta.

Instrucciones para realizar la resta

  • SUB - Se utiliza para restar el byte del byte / palabra de la palabra.

  • SBB - Se utiliza para realizar restas con préstamo.

  • DEC - Se usa para disminuir el byte / palabra proporcionado en 1.

  • NPG - Se usa para negar cada bit del byte / palabra proporcionado y agregar el complemento de 1/2.

  • CMP - Se utiliza para comparar 2 bytes / palabra proporcionados.

  • AAS - Se utiliza para ajustar los códigos ASCII después de la resta.

  • DAS - Se utiliza para ajustar el decimal después de la resta.

Instrucción para realizar multiplicaciones

  • MUL - Se utiliza para multiplicar byte sin signo por byte / palabra por palabra.

  • IMUL - Se utiliza para multiplicar byte con signo por byte / palabra por palabra.

  • AAM - Se utiliza para ajustar los códigos ASCII después de la multiplicación.

Instrucciones para realizar la división

  • DIV - Se utiliza para dividir la palabra sin firmar por byte o la palabra doble sin firmar por palabra.

  • IDIV - Se utiliza para dividir la palabra firmada por byte o la palabra doble firmada por palabra.

  • AAD - Se utiliza para ajustar los códigos ASCII después de la división.

  • CBW - Se utiliza para llenar el byte superior de la palabra con las copias del bit de signo del byte inferior.

  • CWD - Se utiliza para completar la palabra superior de la palabra doble con el bit de signo de la palabra inferior.

Instrucciones de manipulación de bits

Estas instrucciones se utilizan para realizar operaciones en las que intervienen bits de datos, es decir, operaciones como lógica, desplazamiento, etc.

A continuación se muestra la lista de instrucciones de este grupo:

Instrucciones para realizar una operación lógica

  • NOT - Se utiliza para invertir cada bit de un byte o palabra.

  • AND - Se utiliza para agregar cada bit en un byte / palabra con el bit correspondiente en otro byte / palabra.

  • OR - Se utiliza para multiplicar cada bit de un byte / palabra con el bit correspondiente en otro byte / palabra.

  • XOR - Se utiliza para realizar la operación O exclusiva sobre cada bit de un byte / palabra con el bit correspondiente en otro byte / palabra.

  • TEST - Se utiliza para agregar operandos para actualizar banderas, sin afectar a los operandos.

Instrucciones para realizar operaciones por turnos

  • SHL/SAL - Se utiliza para desplazar bits de un byte / palabra hacia la izquierda y poner cero (S) en LSB.

  • SHR - Se utiliza para desplazar bits de un byte / palabra hacia la derecha y poner cero (S) en los MSB.

  • SAR - Se utiliza para desplazar bits de un byte / palabra hacia la derecha y copiar el MSB antiguo en el nuevo MSB.

Instrucciones para realizar operaciones de rotación

  • ROL - Se utiliza para rotar bits de byte / palabra hacia la izquierda, es decir, MSB a LSB y Carry Flag [CF].

  • ROR - Se utiliza para rotar bits de byte / palabra hacia la derecha, es decir, LSB a MSB y Carry Flag [CF].

  • RCR - Se utiliza para rotar bits de byte / palabra hacia la derecha, es decir, LSB a CF y CF a MSB.

  • RCL - Se utiliza para rotar bits de byte / palabra hacia la izquierda, es decir, MSB a CF y CF a LSB.

Instrucciones de cadena

La cadena es un grupo de bytes / palabras y su memoria siempre se asigna en orden secuencial.

A continuación se muestra la lista de instrucciones de este grupo:

  • REP - Se usa para repetir la instrucción dada hasta CX ≠ 0.

  • REPE/REPZ - Se utiliza para repetir la instrucción dada hasta que CX = 0 o bandera cero ZF = 1.

  • REPNE/REPNZ - Se utiliza para repetir la instrucción dada hasta que CX = 0 o bandera cero ZF = 1.

  • MOVS/MOVSB/MOVSW - Se utiliza para mover el byte / palabra de una cadena a otra.

  • COMS/COMPSB/COMPSW - Se utiliza para comparar dos cadenas de bytes / palabras.

  • INS/INSB/INSW - Se utiliza como una cadena de entrada / byte / palabra desde el puerto de E / S a la ubicación de memoria proporcionada.

  • OUTS/OUTSB/OUTSW - Se utiliza como una cadena de salida / byte / palabra desde la ubicación de memoria proporcionada al puerto de E / S.

  • SCAS/SCASB/SCASW - Se utiliza para escanear una cadena y comparar su byte con un byte en AL o palabra de cadena con una palabra en AX.

  • LODS/LODSB/LODSW - Se utiliza para almacenar el byte de cadena en AL o la palabra de cadena en AX.

Instrucciones de transferencia de ejecución del programa (instrucciones de rama y bucle)

Estas instrucciones se utilizan para transferir / bifurcar las instrucciones durante una ejecución. Incluye las siguientes instrucciones:

Instrucciones para transferir la instrucción durante una ejecución sin ninguna condición -

  • CALL - Se utiliza para llamar a un procedimiento y guardar su dirección de retorno en la pila.

  • RET - Se utiliza para volver del procedimiento al programa principal.

  • JMP - Se utiliza para saltar a la dirección proporcionada y pasar a la siguiente instrucción.

Instrucciones para transferir la instrucción durante una ejecución con algunas condiciones:

  • JA/JNBE - Se utiliza para saltar si la instrucción superior / no inferior / igual satisface.

  • JAE/JNB - Se utiliza para saltar si la instrucción superior / no inferior satisface.

  • JBE/JNA - Se utiliza para saltar si la instrucción inferior / igual / no superior satisface.

  • JC - Se usa para saltar si la bandera de acarreo CF = 1

  • JE/JZ - Se usa para saltar si bandera igual / cero ZF = 1

  • JG/JNLE - Se utiliza para saltar si se satisface la instrucción mayor / no menor / igual.

  • JGE/JNL - Se usa para saltar si es mayor que / igual / no menor que la instrucción satisface.

  • JL/JNGE - Se usa para saltar si la instrucción menor que / no mayor que / igual satisface.

  • JLE/JNG - Se usa para saltar si es menor / igual / si no mayor que la instrucción satisface.

  • JNC - Se usa para saltar si no hay bandera de acarreo (CF = 0)

  • JNE/JNZ - Se usa para saltar si no es igual / bandera cero ZF = 0

  • JNO - Se usa para saltar si no hay bandera de desbordamiento OF = 0

  • JNP/JPO - Se usa para saltar si no hay paridad / paridad impar PF = 0

  • JNS - Se usa para saltar si no firma SF = 0

  • JO - Se usa para saltar si la bandera de desbordamiento OF = 1

  • JP/JPE - Se usa para saltar si paridad / paridad par PF = 1

  • JS - Se usa para saltar si la bandera de señal SF = 1

Instrucciones de control del procesador

Estas instrucciones se utilizan para controlar la acción del procesador estableciendo / restableciendo los valores de la bandera.

A continuación se encuentran las instrucciones de este grupo:

  • STC - Se utiliza para establecer el indicador de acarreo CF en 1

  • CLC - Se utiliza para borrar / restablecer el indicador de acarreo CF a 0

  • CMC - Se utiliza para poner complemento en el estado de bandera de acarreo CF.

  • STD - Se utiliza para establecer el indicador de dirección DF en 1

  • CLD - Se utiliza para borrar / restablecer el indicador de dirección DF a 0

  • STI - Se utiliza para establecer el indicador de habilitación de interrupciones en 1, es decir, habilitar la entrada INTR.

  • CLI - Se utiliza para borrar el indicador de habilitación de interrupciones a 0, es decir, deshabilitar la entrada INTR.

Instrucciones de control de iteraciones

Estas instrucciones se utilizan para ejecutar las instrucciones dadas varias veces. A continuación se muestra la lista de instrucciones de este grupo:

  • LOOP - Se utiliza para repetir un grupo de instrucciones hasta que se satisfaga la condición, es decir, CX = 0

  • LOOPE/LOOPZ - Se utiliza para repetir un grupo de instrucciones hasta que satisfaga ZF = 1 & CX = 0

  • LOOPNE/LOOPNZ - Se utiliza para repetir un grupo de instrucciones hasta que satisfaga ZF = 0 & CX = 0

  • JCXZ - Se usa para saltar a la dirección proporcionada si CX = 0

Instrucciones de interrupción

Estas instrucciones se utilizan para llamar a la interrupción durante la ejecución del programa.

  • INT - Se utiliza para interrumpir el programa durante la ejecución y llamar al servicio especificado.

  • INTO - Se utiliza para interrumpir el programa durante la ejecución si OF = 1

  • IRET - Se usa para regresar del servicio de interrupción al programa principal