O 8086 possui ao todo 22 registradores. Desses, AX, BX, CX, DX são de uso de propósito geral. Além desses, os registradores de segmentos, ponteiros e indexadores fazem parte dos registradores do 8086. Nesta parte do tutorial vamos ver todas esses registradores e seus usos.

Os registradores de 16-bits AX, BX, CX e DX são divididos em suas partes, 8-bits, H(High) e L(Low): AH, AL, BH, BL, CH, CL, DH E DL. Esses registradores armazenam dados 8/16-bits para cálculos aritméticos, movimentação de dados e outras operações.

Tab. 1: Registradores de uso geral
8-bits 8-bits 16-Bits
AH AL AX
BH BL BX
CH CL CX
DH DL DX

Os segmentos de memória do 8086 são armazenados/acessados pelos registradores de 16-Bits de segmento: CS, DS, ES e SS. Esses, em conjunto com indexadores e ponteiros são utilizados formar endereços de memória para acessar variáveis, estruturas de dados, arrays e outros.

Tab. 2: Registradores de Segmento
Registrador Descrição
CS Code Segment Segmento de Código
DS Data Segment Segmento de Dados
ES Extra Segment Segmento Extra
SS Stack Segment Segmento de Pilha
CS

O registrador CS, armazena o ponteiro base para o segmento que contém o código do programa. Esse registrador é utilizado em conjunto com IP para obter o endereço da instrução corrente para "formar o contador de programa" como em outros processadores.

DS

O Data Segment, armazena o endereço base para o segmento que contém dados, variáveis e outros recursos. O DS é utilizado em conjunto com os registradores BX, BP, SI e DI.

ES

O ES, segmento extra, é um registrador que armazena o endereço de um segmento que é definido pelo usuário. Algumas instruções fazem uso do ES para movimentação de dados, por exemplo.

SS

O registrador Stack Segment armazena o endereço da base da Stack(Pilha) do 8086. O SS é utilizado em conjunto com BP ou SP para acessar informações na pilha.

A atribuição ou movimentação de endereços nos registradores de segmentação só pode ser realizada mediante outro registrador AX, BX, CX ou DX onde um endereço é carregado previamente.

Os registradores SP, BP, BX, SI, DI e IP têm o tamanho de 16-bits, tendo também seus propósitos específicos. Esses registradores, são mostradas na tabela abaixo como suas descrições básicas:

Tab. 3: Registradores de índice e ponteiro
Registrador Descrição
DI Destine Index Índice de Destino
SI Source Index Índice de Origem
SP Stack Pointer Ponteiro de Pilha
IP Instruction Pointer Ponteiro de Instrução
BP Base Pointer Pointeiro de Base
DI/SI

Tanto o SI quanto DI são registradores de indexação e utilizados em transferência de dados. O SI armazena o endereço de origem do dado e DI armazena o endereço de destino. Ambos são usados em conjunto com DS.

SP

O SP armazena o ponteiro para o topo da pilha que será utilizada pelo processador como memória interna. O SP é utilizado em conjunto com o registrador SS.

IP

O registrador IP armazena o endereço da instrução corrente que será executada. O IP é combinado apenas com o registrador de segmento CS, montando assim esse endereço mencionado. Tanto o CS quanto IP não podem ser alterados via instrução.

BP

O registrador BP armazena o endereço/ponteiro base para acessar alguma informação na Stack. Esses registradores são utilizados em conjunto com SS para recuperar parâmetros e variáveis locais.

É possível utilizar os registradores acima como registradores de uso geral para armazenar dados, porém esse uso de ser feito com cuidado para evitar problemas.

Os endereços contidos nos registradores BX, SI, DI, BP são interpretados ou chamados de/como offsets.

O status do processador 8086 pode ser visto pelo registrador PSR, Registrador de Status ou Flags. Esse registrador é composto de 16 bits sendo que os bits 1, 3, 11~15 são reservados e sempre têm seus valores setados com 0.

As flags C, D e I podem ser manipuladas com as suas respectivas instruções SET e RESET. Essas instruções serão estudados mais adiante.

Tab. 4: Processor Status Register/Flags
Bit 15 Bit 14 Bit 13 Bit 12 Bit 11 Bit 10 Bit 9 Bit 8 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
- - - - - O D I T S Z AC - P - C
Bit 0: Carry

A flag C(Carry), pode ser entendida como o "Vai-um ou Vem-um" em operações aritméticas, por exemplo. Em instrução de deslocamento e rotação de bits representa os bits mais e menos significativos.

Bit 2: Parity - Paridade

A flag Parity informa quando um valor tem seus números de bits setados(1) é par. A flag é igual a 1 quando o número de bits 1 é par e 0 caso contrário.

Bit 4: Auxiliary Carry

A flag AC, pode ser entendida como o "Vai-um ou Vem-um" em operações aritméticas. Funciona como uma Carry, mas apenas para o nibble menos significativo de um registrador de 8-bits.

Bit 5: Zero

A flag Z(Zero) indica que o valor ou resultado é igual a zero. Se for igual a zero, a flag recebe o valor 1, caso contrário recebe o valor de 0.

Bit 6: Sign

A flag S indica a sinalização de um valor armazenado em um registrador. Se um valor for positivo, a flag recebe valor 0, caso seja negativo, recebe o valor 1. Um valor sinalizado é indicado pelo bit 7 ou 15 mais significativo.

Bit 7: Trap/Trace

A flag T é utilizada para depuração passo a passo. Quando acionada, uma interrupção é lançada após cada instrução executada.

Bit 8: Interrupt-Enable

Flag utilizada para habilitar e desabilitar o reconhecimento de interrupções externas mascaráveis. Quando seu valor é 0, nenhuma interrupção é reconhecida. Quando seu valor é 1, as interrupções são reconhecidas e executadas.

Bit 9: Direction

A flag D indica a direção, frente ou trás, em que alguma operação de transferência de dados é realizada. Quando a flag possui valor 0, os registradores de indexação serão incrementados. Quando o valor for 1, serão decrementados.

Bit 10: Overflow

A flag O(Overflow) é utilizada em operações que envolvem aritmética sinalizada indicando um extravasamento. Em resumo, se dois valores de mesmo sinal são somados ou subtraídos e um valor de sinal contrário é gerado, há overflow. Havendo overflow, a flag recebe o valor 1, caso contrário, recebe o valor 0.

  1. 18/02/2025 - revisão 1 - ajustes pontuais
  2. 28/10/2024 - versão inicial