Duas Flags Especiais no Registo FLAGS
Bit 10 = DF (Direction Flag), Bit 8 = TF (Trap Flag). Controlam direção de strings e tracing ao nível de instrução.
Direction Flag (DF)
- DF = 0 (CLD): Instruções string auto-incrementam SI/DI (forward).
- DF = 1 (STD): Instruções string auto-decrementam SI/DI (backward).
- Instruções afetadas:
MOVS, CMPS, SCAS, LODS, STOS, INS, OUTS (e prefixos REP).
Exemplo: Cópia Forward Depois Reverse
; Copia 10 bytes de src para dst (forward) cld ; DF=0 mov si, offset src mov di, offset dst mov cx, 10 rep movsb ; SI,DI incrementam ; Inverte string no local (backward) std ; DF=1 mov si, offset dst + 9 mov di, offset dst + 9 mov cx, 10 rep movsb ; SI,DI decrementam
Trap Flag (TF)
- TF = 0: Execução normal.
- TF = 1: Após cada instrução, CPU gera INT 1 (Tipo 1) — exceção single-step.
- Usada por debuggers (DEBUG, Turbo Debugger, WinDbg, GDB) para implementar "Step Into".
- Definida via
INT 3 (breakpoint) ou PUSHF / OR word ptr [sp], 100h / POPF. - Handler de interrupção pode examinar registos, memória, depois
IRET para retomar.
Workflow Debugger
- Debugger define TF=1 no FLAGS guardado na stack.
- Código utilizador corre uma instrução.
- CPU faz push FLAGS/CS/IP, limpa TF, salta para handler INT 1 (debugger).
- Debugger lê estado registos, atualiza UI.
- Debugger restaura TF=1 no FLAGS guardado,
IRET → próxima instrução.
Interação
- DF e TF são independentes; ambos em FLAGS.
- Instrução string com TF=1: cada iteração (cada MOVSB) dispara INT 1 — extremamente lento, mas permite inspeção por elemento.
Resumo
| Flag | Bit | Instrução para Definir | Instrução para Limpar | Uso Principal |
| DF | 10 | STD | CLD | Direção string (SI/DI inc/dec) |
| TF | 8 | INT 3 / POPF com bit | IRET (auto) / POPF | Debug single-step |