Modalità di Indirizzamento Assembly 8086: Riferimento Completo (7 Modalità)
L'Intel 8086 supporta 7 modalità di indirizzamento principali per accedere a operandi in memoria o registri. Ciascuna determina come viene calcolato l'indirizzo effettivo (EA).
Le 7 Modalità di Indirizzamento
1. Indirizzamento a Registro
- Operando in registro. Nessun accesso memoria.
- Esempi:
MOV AX, BX,ADD CL, DH,INC SI. - Il più veloce (nessun calcolo EA, nessun ciclo bus).
2. Indirizzamento Immediato
- Operando codificato nell'istruzione. Dati costanti.
- Esempi:
MOV AX, 1234H,ADD BL, 42,CMP CX, 0FFFFH. - Immediato 8-bit o 16-bit; esteso di segno per operazioni 8-bit a 16-bit.
3. Indirizzamento Diretto (Assoluto)
- Indirizzo effettivo = spostamento 16-bit nell'istruzione. Nessun registro.
- Esempio:
MOV AX, [1234H]→ carica parola all'offset 1234H nel segmento DS corrente. - Codifica: opcode + modrm (mod=00, r/m=110) + disp16.
4. Indirizzamento Indiretto a Registro
- Indirizzo effettivo in registro base/indice: BX, SI, DI, o BP.
- Esempi:
MOV AX, [BX],MOV [SI], CL,ADD [DI], 5. BPdefault a segmento SS; gli altri usano DS.
5. Indirizzamento Basato (Base + Spostamento)
- EA = BX o BP + spostamento 8/16-bit.
- Esempi:
MOV AX, [BX+10H],MOV [BP-2], DX. - Usato per: campi strutture, frame dello stack (BP), array base + offset.
6. Indirizzamento Indicizzato (Indice + Spostamento)
- EA = SI o DI + spostamento 8/16-bit.
- Esempi:
MOV AL, [SI+20H],MOV [DI-4], BX. - Usato per: accesso elemento array (indice in SI/DI, base in disp).
7. Indirizzamento Basato-Indicizzato (Base + Indice + Spostamento)
- EA = BX/BP + SI/DI + spostamento 8/16-bit. Quattro combinazioni:
[BX+SI],[BX+DI],[BP+SI],[BP+DI](+ opzionale disp).- Esempi:
MOV AX, [BX+SI+100H],ADD [BP+DI-6], CL. - Usato per: array 2D (riga in BX, colonna in SI), frame stack con array locali.
Default dei Registri di Segmento
| Registro Base | Segmento Default | Prefisso Override |
|---|---|---|
| BX, SI, DI | DS | CS:, ES:, SS:, FS:, GS: (386+) |
| BP | SS | DS:, ES:, CS: (raro) |
Calcolo Indirizzo Effettivo (Real Mode)
Indirizzo Fisico = (Segmento × 16) + Indirizzo Effettivo
Segmento = DS (default) o override. EA dalle modalità 3–7 sopra.
Note sulla Codifica (Byte ModR/M)
- mod (2 bit): 00=mem senza disp, 01=mem disp8, 10=mem disp16, 11=registro.
- reg (3 bit): registro operando.
- r/m (3 bit): modalità indirizzamento memoria / registro.
- Le modalità 4–7 usano mod ≠ 11 con codici r/m specifici (es. r/m=000 → [BX+SI]).
Bonus: 80386+ Aggiunge
- Indicizzato Scalato:
[base + index*scale + disp], scale = 1,2,4,8. - Registri 32-bit: EAX, ESI, EBP, ESP (con byte SIB).
- Segmenti FS/GS.
- RIP-relative (x86-64):
[RIP + disp32]— codice indipendente dalla posizione.
In sintesi: Le 7 modalità dell'8086 coprono accesso scalare, array, struct e stack. Padroneggia [BX+SI+disp] e [BP+disp] — sono i cavalli di battaglia per strutture dati e frame dello stack.