Modos de Direccionamiento en Ensamblador 8086: Referencia Completa (7 Modos)

El Intel 8086 soporta 7 modos de direccionamiento principales para acceder a operandos en memoria o registros. Cada uno determina cómo se calcula la dirección efectiva (EA).

Los 7 Modos de Direccionamiento

1. Direccionamiento por Registro

  • Operando en registro. Sin acceso a memoria.
  • Ejemplos: MOV AX, BX, ADD CL, DH, INC SI.
  • El más rápido (sin cálculo de EA, sin ciclo de bus).

2. Direccionamiento Inmediato

  • Operando codificado en la instrucción. Dato constante.
  • Ejemplos: MOV AX, 1234H, ADD BL, 42, CMP CX, 0FFFFH.
  • Inmediato de 8 o 16 bits; se extiende con signo de 8 bits a 16 bits para operaciones.

3. Direccionamiento Directo (Absoluto)

  • Dirección efectiva = desplazamiento de 16 bits en la instrucción. Sin registros.
  • Ejemplo: MOV AX, [1234H] → carga la palabra en el offset 1234H en el DS actual.
  • Codificación: opcode + modrm (mod=00, r/m=110) + disp16.

4. Direccionamiento Indirecto por Registro

  • Dirección efectiva en registro base/índice: BX, SI, DI o BP.
  • Ejemplos: MOV AX, [BX], MOV [SI], CL, ADD [DI], 5.
  • BP usa por defecto el segmento SS; los demás usan DS.

5. Direccionamiento Basado (Base + Desplazamiento)

  • EA = BX o BP + desplazamiento de 8/16 bits.
  • Ejemplos: MOV AX, [BX+10H], MOV [BP-2], DX.
  • Usado para: campos de estructura, marcos de pila (BP), base de arreglo + offset.

6. Direccionamiento Indexado (Índice + Desplazamiento)

  • EA = SI o DI + desplazamiento de 8/16 bits.
  • Ejemplos: MOV AL, [SI+20H], MOV [DI-4], BX.
  • Usado para: acceso a elementos de arreglo (índice en SI/DI, base en desplazamiento).

7. Direccionamiento Basado Indexado (Base + Índice + Desplazamiento)

  • EA = BX/BP + SI/DI + desplazamiento de 8/16 bits. Cuatro combinaciones:
  • [BX+SI], [BX+DI], [BP+SI], [BP+DI] (+ desplazamiento opcional).
  • Ejemplos: MOV AX, [BX+SI+100H], ADD [BP+DI-6], CL.
  • Usado para: arreglos 2D (fila en BX, columna en SI), marcos de pila con arreglos locales.

Registros de Segmento Predeterminados

Registro BaseSegmento PredeterminadoPrefijo de Anulación
BX, SI, DIDSCS:, ES:, SS:, FS:, GS: (386+)
BPSSDS:, ES:, CS: (raro)

Cálculo de Dirección Efectiva (Modo Real)

Dirección Física = (Segmento × 16) + Dirección Efectiva

Segmento = DS (predeterminado) o anulado. EA de los modos 3–7 anteriores.

Notas de Codificación (Byte ModR/M)

  • mod (2 bits): 00=mem sin desplazamiento, 01=mem disp8, 10=mem disp16, 11=registro.
  • reg (3 bits): operando de registro.
  • r/m (3 bits): modo de direccionamiento de memoria / registro.
  • Los modos 4–7 usan mod ≠ 11 con códigos r/m específicos (por ejemplo, r/m=000 → [BX+SI]).

Bonus: 80386+ Añade

  • Indexado Escalado: [base + index*scale + disp], scale = 1,2,4,8.
  • Registros de 32 bits: EAX, ESI, EBP, ESP (con byte SIB).
  • Segmentos FS/GS.
  • Relativo a RIP (x86-64): [RIP + disp32] — código independiente de posición.

Conclusión: Los 7 modos del 8086 cubren acceso a escalares, arreglos, estructuras y pila. Domina [BX+SI+disp] y [BP+disp] — son los caballos de batalla para estructuras de datos y marcos de pila.