Drapeaux Direction (DF) & Trap (TF) du 8086 : Opérations chaînes & débogage pas-à-pas
Deux drapeaux spéciaux dans le registre FLAGS
Bit 10 = DF (Direction Flag), Bit 8 = TF (Trap Flag). Ils contrôlent la direction des chaînes et le traçage niveau instruction.
Drapeau Direction (DF)
- DF = 0 (CLD) : Instructions chaînes auto-incrémentent SI/DI (avant).
- DF = 1 (STD) : Instructions chaînes auto-décrémentent SI/DI (arrière).
- Instructions affectées :
MOVS, CMPS, SCAS, LODS, STOS, INS, OUTS(et préfixesREP).
Exemple : Copie avant puis copie inverse
; Copie 10 octets src vers dst (avant) cld ; DF=0 mov si, offset src mov di, offset dst mov cx, 10 rep movsb ; SI,DI incrémentent ; Inverse la chaîne sur place (arrière) std ; DF=1 mov si, offset dst + 9 mov di, offset dst + 9 mov cx, 10 rep movsb ; SI,DI décrémentent
Drapeau Trap (TF)
- TF = 0 : Exécution normale.
- TF = 1 : Après chaque instruction, CPU génère INT 1 (Type 1) — exception pas-à-pas unique.
- Utilisé par débogueurs (DEBUG, Turbo Debugger, WinDbg, GDB) pour implémenter "Step Into".
- Mis via
INT 3(point d'arrêt) ouPUSHF / OR word ptr [sp], 100h / POPF. - Gestionnaire interruption peut examiner registres, mémoire, puis
IRETpour reprendre.
Flux débogueur
- Débogueur met TF=1 dans FLAGS sauvegardés sur pile.
- Code utilisateur exécute une instruction.
- CPU empile FLAGS/CS/IP, efface TF, saute vers gestionnaire INT 1 (débogueur).
- Débogueur lit état registres, met à jour UI.
- Débogueur restaure TF=1 dans FLAGS sauvegardés,
IRET→ instruction suivante.
Interaction
- DF et TF sont indépendants ; tous deux dans FLAGS.
- Instruction chaîne avec TF=1 : chaque itération (chaque MOVSB) déclenche INT 1 — extrêmement lent, mais permet inspection par élément.
Résumé
| Drapeau | Bit | Instruction pour Set | Instruction pour Clear | Usage principal |
|---|---|---|---|---|
| DF | 10 | STD | CLD | Direction chaînes (SI/DI inc/dec) |
| TF | 8 | INT 3 / POPF avec bit | IRET (auto) / POPF | Débogage pas-à-pas |
