Microprocessador - Unidades Funcionais 8086
O microprocessador 8086 é dividido em duas unidades funcionais, ou seja, EU (Unidade de Execução) e BIU (Unidade de interface de barramento).
EU (Unidade de Execução)
A unidade de execução fornece instruções para a BIU informando de onde buscar os dados e, em seguida, decodificar e executar essas instruções. Sua função é controlar as operações nos dados usando o decodificador de instruções e ALU. EU não tem conexão direta com barramentos de sistema, conforme mostrado na figura acima, ele executa operações sobre dados por meio de BIU.
Vamos agora discutir as partes funcionais dos microprocessadores 8086.
ALU
Ele lida com todas as operações aritméticas e lógicas, como +, -, ×, /, OR, AND, NOT operações.
Registro de bandeira
É um registrador de 16 bits que se comporta como um flip-flop, ou seja, muda seu estado de acordo com o resultado armazenado no acumulador. Possui 9 sinalizadores e eles são divididos em 2 grupos - Sinalizadores condicionais e Sinalizadores de controle.
Sinalizadores condicionais
Ele representa o resultado da última instrução aritmética ou lógica executada. A seguir está a lista de sinalizadores condicionais -
Carry flag - Este sinalizador indica uma condição de estouro para operações aritméticas.
Auxiliary flag- Quando uma operação é realizada na ALU, resulta em um transporte / carrinho de nibble inferior (ou seja, D0 - D3) para nibble superior (ou seja, D4 - D7), então este sinalizador é definido, ou seja, o transporte dado pelo bit D3 para D4 é Bandeira AF. O processador usa esse sinalizador para realizar a conversão de binário em BCD.
Parity flag- Este sinalizador é usado para indicar a paridade do resultado, ou seja, quando os 8 bits de ordem inferior do resultado contêm um número par de 1, então o Sinalizador de Paridade é definido. Para números ímpares de 1, o Sinalizador de Paridade é reiniciado.
Zero flag - Este sinalizador é definido como 1 quando o resultado da operação aritmética ou lógica é zero, caso contrário, ele é definido como 0.
Sign flag - Este sinalizador contém o sinal do resultado, ou seja, quando o resultado da operação é negativo, o sinalizador é definido como 1 e então definido como 0.
Overflow flag - Este sinalizador representa o resultado quando a capacidade do sistema é excedida.
Bandeiras de controle
Sinalizadores de controle controlam as operações da unidade de execução. A seguir está a lista de sinalizadores de controle -
Trap flag- É usado para controle de etapa única e permite ao usuário executar uma instrução por vez para depuração. Se estiver definido, o programa pode ser executado em um modo de etapa única.
Interrupt flag- É um sinalizador de ativação / desativação de interrupção, ou seja, usado para permitir / proibir a interrupção de um programa. É definido como 1 para condição de interrupção habilitada e definido como 0 para condição de interrupção desabilitada.
Direction flag- É usado na operação de string. Como o nome sugere, quando é definido, os bytes da string são acessados do endereço de memória superior para o endereço de memória inferior e vice-a-versa.
Registro de uso geral
Existem 8 registradores de uso geral, ou seja, AH, AL, BH, BL, CH, CL, DH e DL. Esses registros podem ser usados individualmente para armazenar dados de 8 bits e podem ser usados em pares para armazenar dados de 16 bits. Os pares de registradores válidos são AH e AL, BH e BL, CH e CL e DH e DL. É referido como AX, BX, CX e DX respectivamente.
AX register- Também é conhecido como registro de acumulador. É usado para armazenar operandos para operações aritméticas.
BX register- É usado como base cadastral. É usado para armazenar o endereço de base inicial da área de memória dentro do segmento de dados.
CX register- É denominado contador. É usado na instrução de loop para armazenar o contador de loop.
DX register - Este registro é usado para manter o endereço da porta de E / S para instrução de E / S.
Registro de ponteiro de pilha
É um registrador de 16 bits, que mantém o endereço do início do segmento até o local da memória, onde uma palavra foi armazenada mais recentemente na pilha.
BIU (unidade de interface de barramento)
A BIU cuida de todas as transferências de dados e endereços nos ônibus para a UE, como enviar endereços, buscar instruções da memória, ler dados das portas e da memória, bem como gravar dados nas portas e na memória. EU não tem conexão de direção com barramentos de sistema, então isso é possível com a BIU. EU e BIU estão conectados ao barramento interno.
Possui as seguintes partes funcionais -
Instruction queue- BIU contém a fila de instruções. BIU obtém até 6 bytes das próximas instruções e os armazena na fila de instruções. Quando EU executa instruções e está pronto para sua próxima instrução, ele simplesmente lê a instrução dessa fila de instruções, resultando em maior velocidade de execução.
A busca da próxima instrução enquanto a instrução atual é executada é chamada pipelining.
Segment register- BIU possui barramentos de 4 segmentos, ou seja, CS, DS, SS e ES. Ele contém os endereços de instruções e dados na memória, que são usados pelo processador para acessar os locais da memória. Ele também contém 1 registrador de ponteiro IP, que contém o endereço da próxima instrução a ser executada pela UE.
CS- Significa Segmento de Código. É usado para endereçar um local de memória no segmento de código da memória, onde o programa executável é armazenado.
DS- Significa segmento de dados. Ele consiste em dados usados pelo programa e são acessados no segmento de dados por um endereço de deslocamento ou pelo conteúdo de outro registro que contém o endereço de deslocamento.
SS- Significa Stack Segment. Ele lida com memória para armazenar dados e endereços durante a execução.
ES- Significa segmento extra. ES é um segmento de dados adicional, que é usado pela string para conter os dados de destino extras.
Instruction pointer - É um registro de 16 bits usado para armazenar o endereço da próxima instrução a ser executada.