Bandera Dirección (DF) y Bandera Trampa (TF) del 8086: Operaciones string y depuración paso a paso

Dos banderas especiales en registro FLAGS

Bit 10 = DF (Direction Flag), Bit 8 = TF (Trap Flag). Controlan dirección strings e instrucción-level tracing.

Bandera Dirección (DF)

  • DF = 0 (CLD): Instrucciones string auto-incrementan SI/DI (hacia adelante).
  • DF = 1 (STD): Instrucciones string auto-decrementan SI/DI (hacia atrás).
  • Instrucciones afectadas: MOVS, CMPS, SCAS, LODS, STOS, INS, OUTS (y prefijos REP).

Ejemplo: Copia adelante luego copia atrás

 ; Copia 10 bytes de src a dst (adelante)
cld ; DF=0
mov si, offset src
mov di, offset dst
mov cx, 10
rep movsb ; SI,DI incrementan
; Invierte string in-place (atrás)
std ; DF=1
mov si, offset dst + 9
mov di, offset dst + 9
mov cx, 10
rep movsb ; SI,DI decrementan 

Bandera Trampa (TF)

  • TF = 0: Ejecución normal.
  • TF = 1: Tras cada instrucción, CPU genera INT 1 (Tipo 1) — excepción single-step.
  • Usada por depuradores (DEBUG, Turbo Debugger, WinDbg, GDB) para implementar "Paso a paso".
  • Se setea vía INT 3 (breakpoint) o PUSHF / OR word ptr [sp], 100h / POPF.
  • Handler interrupción puede examinar registros, memoria, luego IRET para reanudar.

Flujo depurador

  1. Depurador setea TF=1 en FLAGS guardados en pila.
  2. Código usuario ejecuta una instrucción.
  3. CPU apila FLAGS/CS/IP, limpia TF, salta a handler INT 1 (depurador).
  4. Depurador lee estado registros, actualiza UI.
  5. Depurador restaura TF=1 en FLAGS guardados, IRET → siguiente instrucción.

Interacción

  • DF y TF son independientes; ambas en FLAGS.
  • Instrucción string con TF=1: cada iteración (cada MOVSB) dispara INT 1 — extremadamente lento, pero permite inspección por elemento.

Resumen

BanderaBitInstrucción setearInstrucción limpiarUso principal
DF10STDCLDDirección string (SI/DI inc/dec)
TF8INT 3 / POPF con bitIRET (auto) / POPFDepuración single-step