Arquitetura Interna do Microprocessador 8086

 

 

O 8086 divide-se internamente em duas unidades:

Execution Unit (EU) - Unidade de Execução:

  • UAL - realiza operações aritméticas de +, -, X, / e operações lógicas AND, OR, NOT, XOR;
  • contem registradores para armazenamento temporário durante as operações, que são endereçados por nome.

BUS Interface Unit (BIU) - Unidade de Interface de Barramento:

  • faz a comunicação de dados entre a EU e o meio externo (memória, E/S);
  • controla a transmissão de sinais de endereços, dados e controle;
  • controla a seqüência de busca e execução de instruções;
  • mecanismo de pre-fetch: busca até 6 instruções futuras deixando-as na fila de instruções (instruction queue) -> aumento de velocidade.

 

Registradores: elementos de memória muito rápida dentro da CPU.

  • de dados, ou de propósito geral
  • de endereços (segmentos, apontadores e índices)
  • sinalizadores de estado e controle (FLAGS)

Registradores de dados:

AX e BX

  • são todos registradores de 16 bits
  • utilizados nas operações aritméticas e lógicas
  • podem ser usados como registradores de 16 ou 8 bits

Registradores de 8 bits cada:
AH e AL
BH e BL
"H" -> byte alto ou superior
"L" -> byte baixo ou inferior

  • AX (acumulador) -> utilizado como acumulador em operações aritméticas e lógicas; em instruções de E/S, ajuste decimal, conversão, etc.
  • BX (base) -> usado como registrador de BASE para referenciar posições de memória. BX armazena o endereço BASE de uma tabela ou vetor de dados, a partir do qual outras posições são obtidas adicionando-se um valor de deslocamento (offset).

 

Registrador apontador de instrução:

IP (instruction pointer)

  • utilizado em conjunto com CS para localizar a posição, dentro do segmento de código corrente, da próxima instrução a ser executada.
  • IP é automaticamente incrementado em função do número de bytes da instrução executada.

 

Registradores apontador de pilha e de índice:

  • Armazenam valores de deslocamento de endereços (offset), a fim de acessar regiões da memória muito utilizadas:
    • pilha,
    • blocos de dados,
    • arrays e strings.
  • Podem ser utilizados em operações aritméticas e lógicas, possibilitando que os valores de deslocamento sejam resultados de computações anteriores.

· SP (stack pointer - apontador de pilha) é utilizado em conjunto com SS, para acessar a área de pilha na memória; aponta para o topo da pilha.

 

Registrador de sinalizadores (FLAGS):

  • indica o estado do microprocessador durante a execução de cada instrução;
  • conjunto de bits individuais, cada qual indicando alguma propriedade;
  • subdividem-se em: FLAGS da estado (status) e FLAGS de controle.
  • organização:
    • 1 registrador de 16 bits
    • 6 FLAGS de estado
    • 3 FLAGS de controle
    • 7 bits não utilizados (sem função)

    15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
    OF DF IF TF SF ZF AF PF CF

Flags de estado:

CF - Flag de Carry

CF = 1 -> após instruções de soma que geram "vai um" após instruções de subtração que não geram "empréstimo" ("empresta um").

CF = 0 -> caso contrário.

 

ZF - Flag de Zero

ZF = 1 -> caso o resultado da última operação aritmética ou lógica seja igual a zero;

ZF = 0 -> caso contrário.

 

SF - Flag de Sinal: utilizado para indicar se o número resultado é positivo ou negativo em termos da aritmética em Complemento de 2 (se não ocorrer erro de transbordamento - overflow).

SF = 1 -> número negativo.

SF = 0 -> número positivo.

 

OF - Flag de Overflow (erro de transbordamento).

OF = 1 -> qualquer operação que produza overflow.

OF = 0 -> caso contrário.

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OF DF IF TF SF ZF AF PF CF

 

Os registradores do 8086 (visão geral):

Registradores de dados

  • AH AL AX
  • BH BL BX

Registradores índices e apontadores

  • IP

Registrador de sinalizadores

FLAGS

  • O registrador IP corresponde ao Contador de Programa - PC
  • Todos os registradores são de 16 bits
  • AH -> byte alto de AX; AL byte baixo de AX; ambos de 8 bits

Gerenciamento de memória por segmentação

O 8086 possui 20 bits para acessar posições de memória física
220 = 1.048.576 bytes (1 Mbyte) posições endereçáveis

Exemplos de endereços:

0000 0000 0000 0000 0000b -> 00000h
0000 0000 0000 0000 0001b -> 00001h
0000 0000 0000 0000 0010b -> 00002h -> 5 dígitos hexa
0000 0000 0000 0000 0011b -> 00003h
1111 1111 1111 1111 1111b -> FFFFFh

· O 8086 opera internamente com 16 bits

· Problema: Como gerar endereços com 20 bits?

· Solução: Utilizar a idéia de segmentação de memória!

Segmento de memória:

· bloco de 64 Kbytes de posições de memória consecutivas

· 216 = 65.536 bytes (64 Kbytes)

· Segmento de memória é identificado por um número de segmento

· Uma posição de memória é especificada pelo número de segmento e por um deslocamento (offset) em relação ao início do segmento.

 

· O identificador de segmento (base) aponta para uma região da memória.

· O offset aponta para um local dentro deste segmento.

· O offset é aquele que aparece nos programas como o endereço dos dados, rótulos e endereços de instruções.

· O identificador de segmento aparece somente quando um novo segmento precisa ser especificado.

· Segmentação é um esquema muito útil para gerar códigos relocáveis.

· A maioria das variáveis está localizada no segmento de dados, podem também estar localizadas em outros segmentos;

 

Interrupção:

 

Ocorrência eventual, durante a execução de um processamento pelo computador, que deve ser prontamente atendida, causando a suspensão do processamento em curso para o atendimento da "chamada".

 

Tipos de interrupções do 8086:

- Causadas pela ocorrência de eventos "catastróficos":

· falta de energia

· erro de memória

· erro de paridade em comunicações

· este tipo de interrupção não pode ser inibido.

 

- Causadas pela ação de dispositivos externos (periféricos):

· podem ser habilitadas ou inibidas

 

- Causadas pelo próprio programa em curso:

· erro de divisão

· erro de transbordamento (overflow)

· TRAP - útil para depuração de um programa

· BREAKPOINT - colocado em pontos estratégicos do programa para permitir processamento especial.

 

-Interrupção RESET

· permite a inicialização do microprocessador, via hardware.

 

 

Copyright © 2007 Yamada-san. All Rights Reserved.