Microprocesador - Unidades funcionales 8086
8086 El microprocesador se divide en dos unidades funcionales, es decir, EU (Unidad de ejecución) y BIU (Unidad de interfaz de bus).
UE (Unidad de ejecución)
La unidad de ejecución da instrucciones a BIU indicando desde dónde obtener los datos y luego decodificar y ejecutar esas instrucciones. Su función es controlar operaciones sobre datos usando el decodificador de instrucciones y ALU. EU no tiene conexión directa con los buses del sistema como se muestra en la figura anterior, realiza operaciones sobre datos a través de BIU.
Analicemos ahora las partes funcionales de los microprocesadores 8086.
ALU
Maneja todas las operaciones aritméticas y lógicas, como +, -, ×, /, OR, AND, NOT.
Registro de bandera
Es un registro de 16 bits que se comporta como un flip-flop, es decir, cambia su estado según el resultado almacenado en el acumulador. Tiene 9 banderas y se dividen en 2 grupos: banderas condicionales y banderas de control.
Banderas condicionales
Representa el resultado de la última instrucción aritmética o lógica ejecutada. A continuación se muestra la lista de banderas condicionales:
Carry flag - Esta bandera indica una condición de desbordamiento para operaciones aritméticas.
Auxiliary flag- Cuando se realiza una operación en ALU, da como resultado un acarreo / carretilla desde el nibble inferior (es decir, D0 - D3) al nibble superior (es decir, D4 - D7), entonces esta bandera se establece, es decir, el acarreo dado por el bit D3 a D4 es Bandera AF. El procesador utiliza este indicador para realizar la conversión de binario a BCD.
Parity flag- Esta bandera se utiliza para indicar la paridad del resultado, es decir, cuando los 8 bits de orden inferior del resultado contienen un número par de unos, se establece la bandera de paridad. Para un número impar de unos, se restablece el indicador de paridad.
Zero flag - Esta bandera se establece en 1 cuando el resultado de la operación aritmética o lógica es cero; de lo contrario, se establece en 0.
Sign flag - Esta bandera contiene el signo del resultado, es decir, cuando el resultado de la operación es negativo, la bandera de signo se establece en 1, de lo contrario, se establece en 0.
Overflow flag - Esta bandera representa el resultado cuando se excede la capacidad del sistema.
Banderas de control
Las banderas de control controlan las operaciones de la unidad de ejecución. A continuación se muestra la lista de banderas de control:
Trap flag- Se utiliza para el control de un solo paso y permite al usuario ejecutar una instrucción a la vez para depurar. Si está configurado, el programa se puede ejecutar en un modo de un solo paso.
Interrupt flag- Es una bandera de activación / desactivación de interrupciones, es decir, se utiliza para permitir / prohibir la interrupción de un programa. Se establece en 1 para la condición de interrupción habilitada y en 0 para la condición de interrupción inhabilitada.
Direction flag- Se utiliza en la operación de cadenas. Como sugiere el nombre, cuando se establece, se accede a los bytes de cadena desde la dirección de memoria superior a la dirección de memoria inferior y viceversa.
Registro de propósito general
Hay 8 registros de propósito general, es decir, AH, AL, BH, BL, CH, CL, DH y DL. Estos registros se pueden usar individualmente para almacenar datos de 8 bits y se pueden usar en pares para almacenar datos de 16 bits. Los pares de registros válidos son AH y AL, BH y BL, CH y CL, y DH y DL. Se refiere a AX, BX, CX y DX respectivamente.
AX register- También se conoce como registro acumulador. Se utiliza para almacenar operandos para operaciones aritméticas.
BX register- Se utiliza como registro base. Se utiliza para almacenar la dirección base de inicio del área de memoria dentro del segmento de datos.
CX register- Se conoce como contador. Se utiliza en la instrucción de bucle para almacenar el contador de bucle.
DX register - Este registro se utiliza para contener la dirección del puerto de E / S para la instrucción de E / S.
Registro de puntero de pila
Es un registro de 16 bits, que contiene la dirección desde el inicio del segmento hasta la ubicación de la memoria, donde se almacenó una palabra más recientemente en la pila.
BIU (Unidad de interfaz de bus)
BIU se encarga de todas las transferencias de datos y direcciones en los buses para la UE, como enviar direcciones, obtener instrucciones de la memoria, leer datos de los puertos y la memoria y escribir datos en los puertos y la memoria. EU no tiene conexión de dirección con System Buses, por lo que esto es posible con BIU. EU y BIU están conectados con el bus interno.
Tiene las siguientes partes funcionales:
Instruction queue- BIU contiene la cola de instrucciones. BIU obtiene hasta 6 bytes de instrucciones siguientes y las almacena en la cola de instrucciones. Cuando EU ejecuta instrucciones y está listo para la siguiente instrucción, simplemente lee la instrucción de esta cola de instrucciones, lo que aumenta la velocidad de ejecución.
Obtener la siguiente instrucción mientras se ejecuta la instrucción actual se llama pipelining.
Segment register- BIU tiene buses de 4 segmentos, es decir, CS, DS, SS y ES. Contiene las direcciones de las instrucciones y los datos en la memoria, que son utilizados por el procesador para acceder a las ubicaciones de la memoria. También contiene 1 IP de registro de puntero, que contiene la dirección de la siguiente instrucción a ejecutar por la UE.
CS- Significa Segmento de código. Se utiliza para direccionar una ubicación de memoria en el segmento de código de la memoria, donde se almacena el programa ejecutable.
DS- Significa segmento de datos. Consiste en datos usados por el programa y se accede en el segmento de datos por una dirección de compensación o el contenido de otro registro que contiene la dirección de compensación.
SS- Significa Stack Segment. Maneja la memoria para almacenar datos y direcciones durante la ejecución.
ES- Significa segmento adicional. ES es un segmento de datos adicional, que la cadena utiliza para contener los datos de destino adicionales.
Instruction pointer - Es un registro de 16 bits que se utiliza para contener la dirección de la siguiente instrucción a ejecutar.