O Intel 8086 suporta 7 modos de endereçamento primários para acessar operandos em memória ou registradores. Cada um determina como o endereço efetivo (EA) é calculado.
Os 7 Modos de Endereçamento
1. Endereçamento por Registrador
- Operando no registrador. Sem acesso à memória.
- Exemplos:
MOV AX, BX, ADD CL, DH, INC SI.
- Mais rápido (sem cálculo EA, sem ciclo barramento).
2. Endereçamento Imediato
- Operando codificado na instrução. Dado constante.
- Exemplos:
MOV AX, 1234H, ADD BL, 42, CMP CX, 0FFFFH.
- Imediato 8-bit ou 16-bit; extensão de sinal para ops 8-bit para 16-bit.
3. Endereçamento Direto (Absoluto)
- Endereço efetivo = deslocamento de 16 bits na instrução. Sem registradores.
- Exemplo:
MOV AX, [1234H] → carrega word no offset 1234H no DS atual.
- Codificação: opcode + modrm (mod=00, r/m=110) + disp16.
4. Endereçamento Indireto por Registrador
- Endereço efetivo em registrador base/índice: BX, SI, DI, ou BP.
- Exemplos:
MOV AX, [BX], MOV [SI], CL, ADD [DI], 5.
BP default para segmento SS; outros usam DS.
5. Endereçamento Baseado (Base + Deslocamento)
- EA = BX ou BP + deslocamento 8/16-bit.
- Exemplos:
MOV AX, [BX+10H], MOV [BP-2], DX.
- Usado para: campos de estrutura, stack frames (BP), base array + offset.
6. Endereçamento Indexado (Índice + Deslocamento)
- EA = SI ou DI + deslocamento 8/16-bit.
- Exemplos:
MOV AL, [SI+20H], MOV [DI-4], BX.
- Usado para: acesso elemento array (índice em SI/DI, base em disp).
7. Endereçamento Base-Indexado (Base + Índice + Deslocamento)
- EA = BX/BP + SI/DI + deslocamento 8/16-bit. Quatro combinações:
[BX+SI], [BX+DI], [BP+SI], [BP+DI] (+ disp opcional).
- Exemplos:
MOV AX, [BX+SI+100H], ADD [BP+DI-6], CL.
- Usado para: arrays 2D (linha em BX, coluna em SI), stack frames com arrays locais.
Defaults de Registradores de Segmento
| Registrador Base | Segmento Padrão | Prefixo Override |
| BX, SI, DI | DS | CS:, ES:, SS:, FS:, GS: (386+) |
| BP | SS | DS:, ES:, CS: (raro) |
Cálculo do Endereço Efetivo (Modo Real)
Endereço Físico = (Segmento × 16) + Endereço Efetivo
Segmento = DS (padrão) ou override. EA dos modos 3–7 acima.
Notas de Codificação (Byte ModR/M)
- mod (2 bits): 00=mem sem disp, 01=mem disp8, 10=mem disp16, 11=registrador.
- reg (3 bits): registrador operando.
- r/m (3 bits): modo endereçamento memória / registrador.
- Modos 4–7 usam mod ≠ 11 com códigos r/m específicos (ex.: r/m=000 → [BX+SI]).
Bônus: 80386+ Adiciona
- Indexado Escalado:
[base + index*scale + disp], scale = 1,2,4,8.
- Registradores 32-bit: EAX, ESI, EBP, ESP (com byte SIB).
- Segmentos FS/GS.
- RIP-relativo (x86-64):
[RIP + disp32] — código independente de posição.
Conclusão: Os 7 modos do 8086 cobrem acesso escalar, array, struct e stack. Domine [BX+SI+disp] e [BP+disp] — são os cavalos de batalha para estruturas de dados e stack frames.