Modes adressage 8086 Assembly : Référence complète (7 modes)
L'Intel 8086 supporte 7 modes adressage principaux pour accéder opérandes en mémoire ou registres. Chaque mode détermine comment l'adresse effective (EA) est calculée.
Les 7 modes adressage
1. Adressage registres
- Opérande dans registre. Pas accès mémoire.
- Exemples :
MOV AX, BX,ADD CL, DH,INC SI. - Le plus rapide (pas calcul EA, pas cycle bus).
2. Adressage immédiat
- Opérande encodé dans instruction. Donnée constante.
- Exemples :
MOV AX, 1234H,ADD BL, 42,CMP CX, 0FFFFH. - Immédiat 8 ou 16 bits ; extension signe pour ops 8-bit vers 16-bit.
3. Adressage direct (absolu)
- Adresse effective = déplacement 16 bits dans instruction. Pas registres.
- Exemple :
MOV AX, [1234H]→ charge mot à offset 1234H dans DS courant. - Encodage : opcode + modrm (mod=00, r/m=110) + disp16.
4. Adressage indirect par registre
- Adresse effective dans registre base/index : BX, SI, DI, ou BP.
- Exemples :
MOV AX, [BX],MOV [SI], CL,ADD [DI], 5. BPdéfaut segment SS ; autres utilisent DS.
5. Adressage base + déplacement (Based)
- EA = BX ou BP + déplacement 8/16 bits.
- Exemples :
MOV AX, [BX+10H],MOV [BP-2], DX. - Utilisé pour : champs structure, frames pile (BP), base tableau + offset.
6. Adressage indexé + déplacement (Indexed)
- EA = SI ou DI + déplacement 8/16 bits.
- Exemples :
MOV AL, [SI+20H],MOV [DI-4], BX. - Utilisé pour : accès élément tableau (index dans SI/DI, base dans disp).
7. Adressage base + indexé + déplacement (Based Indexed)
- EA = BX/BP + SI/DI + déplacement 8/16 bits. 4 combos :
[BX+SI],[BX+DI],[BP+SI],[BP+DI](+ disp optionnel).- Exemples :
MOV AX, [BX+SI+100H],ADD [BP+DI-6], CL. - Utilisé pour : tableaux 2D (ligne dans BX, colonne dans SI), frames pile avec tableaux locaux.
Registres segments par défaut
| Registre base | Segment défaut | Préfixe surcharge |
|---|---|---|
| BX, SI, DI | DS | CS:, ES:, SS:, FS:, GS: (386+) |
| BP | SS | DS:, ES:, CS: (rare) |
Calcul adresse effective (Mode réel)
Adresse physique = (Segment × 16) + Adresse effective
Segment = DS (défaut) ou surchargé. EA depuis modes 3–7 ci-dessus.
Notes encodage (Octet ModR/M)
- mod (2 bits) : 00=mem sans disp, 01=mem disp8, 10=mem disp16, 11=registre.
- reg (3 bits) : registre opérande.
- r/m (3 bits) : mode adressage mémoire / registre.
- Modes 4–7 utilisent mod ≠ 11 avec codes r/m spécifiques (ex: r/m=000 → [BX+SI]).
Bonus : 80386+ ajoute
- Indexé échelonné :
[base + index*scale + disp], scale = 1,2,4,8. - Registres 32 bits : EAX, ESI, EBP, ESP (avec octet SIB).
- Segments FS/GS.
- RIP-relatif (x86-64) :
[RIP + disp32]— code position-indépendant.
En résumé : Les 7 modes 8086 couvrent accès scalaire, tableau, structure, pile. Maîtriser [BX+SI+disp] et [BP+disp] — ce sont les chevaux de bataille pour structures données et frames pile.
