Guida completa alle modalità di indirizzamento del microprocessore 8086
Il microprocessore Intel 8086 supporta un ricco set di modalità di indirizzamento che determinano come le istruzioni accedono agli operandi in memoria, registri o spazio I/O. Comprendere queste modalità è essenziale per scrivere codice assembly efficiente.
1. Indirizzamento a registro
Registro diretto: L'operando risiede in un registro di uso generale (AX, BX, CX, DX, SI, DI, BP, SP). Modalità più veloce — nessun accesso alla memoria necessario.
MOV AX, BX ; Copia BX in AX
2. Indirizzamento immediato
Dati immediati: L'operando è codificato direttamente nell'istruzione. Usato per costanti.
MOV CX, 00FFH ; Carica valore immediato
3. Indirizzamento diretto (assoluto)
Indirizzo diretto: L'istruzione contiene l'offset a 16 bit della memoria. Il segmento predefinito è DS.
MOV AL, [2000H] ; Carica dall'offset 2000H in DS
4. Indirizzamento indiretto tramite registro
Il registro puntatore contiene l'offset. Registri: BX, SI, DI, BP.
MOV AL, [BX] ; Carica da DS:BX
MOV AL, [BP] ; Carica da SS:BP (segmento stack predefinito)
5. Indirizzamento indicizzato
Offset di base + registro di indice (SI o DI). Utile per array.
MOV AL, ARRAY[SI] ; ARRAY è la base, SI è l'indice
6. Indirizzamento basato
Registro base (BX o BP) + spostamento. BP predefinito al segmento stack.
MOV AL, [BX+10H] ; DS:BX+10H
MOV AL, [BP+4] ; SS:BP+4 (accesso allo stack frame)
7. Indirizzamento basato-indicizzato
Registro base + registro di indice. Combina base di struttura + indice di array.
MOV AL, [BX][SI] ; DS:BX+SI
MOV AL, [BP][DI] ; SS:BP+DI
8. Indirizzamento basato-indicizzato con spostamento
Base + indice + offset costante. Più flessibile per strutture dati complesse.
MOV AL, TABLE[BX][SI+20H] ; DS:BX+SI+20H
9. Indirizzamento per istruzioni stringa
Modalità specializzate per operazioni a blocchi usando registri dedicati:
Sorgente: DS:SI (o ES:SI con segment override)
Destinazione: ES:DI (non può essere sovrascritto)
Istruzioni: MOVS, CMPS, SCAS, LODS, STOS
SI/DI si incrementano/decrementano automaticamente in base al Direction Flag (DF)
Prefissi di segment override
Qualsiasi riferimento in memoria può usare un prefisso di segment override (CS:, DS:, ES:, SS:) per modificare il segmento predefinito per quell'istruzione soltanto.
Queste modalità di indirizzamento danno all'8086 una notevole flessibilità per la manipolazione di strutture dati, operazioni sullo stack e l'elaborazione di array — ragioni chiave della sua influenza duratura sull'architettura x86.