O 8086 fornece formas flexíveis de formar o endereço efetivo (EA) de 20 bits a partir de registradores de 16 bits. Entendê-los é chave para programação assembly eficiente.
Operando em um registrador. MOV AX, BX — sem acesso à memória.
Operando codificado na instrução. MOV CX, 1234h.
Offset de 16 bits na instrução. MOV AL, [1234h] → EA = DS:1234h.
Offset em BX, SI, DI ou BP. MOV DX, [SI] → EA = DS:SI (BP usa SS).
Registrador base (BX ou BP) + deslocamento 8/16 bits. MOV AX, [BX+10h].
Registrador índice (SI ou DI) + deslocamento. MOV CL, [DI+20h].
Base (BX/BP) + Índice (SI/DI). MOV BX, [BP+SI] → EA = SS:BP+SI.
Base + Índice + disp8/16. MOV [BX+DI+4], AL.
MOVSB, CMPSW, STOSB… usam DS:SI (origem) e ES:DI (destino); auto-inc/dec por flag DF.
IN AL, 3F8h (porta 8 bits).IN AL, DX (porta 16 bits em DX).Qualquer modo memória pode prefixar CS:, DS:, ES:, SS:, FS:, GS: (386+) para selecionar segmento.
EA = (Segmento × 16) + Offset. Offset = soma de base + índice + deslocamento por modo.
Escolher o modo certo reduz bytes da instrução, ciclos e pressão de registradores — crítico em código real-mode 16-bit.
Tecnologia Eletrônica © [www.351231.com]