Fallenflagge - Trap flag

Ein Trap - Flag erlaubt den Betrieb eines Prozessors in Ein- Schritt - Modus. Wenn ein solches Flag verfügbar ist, können Debugger damit die Ausführung eines Computerprogramms schrittweise durchlaufen .

Einzelschritt-Interrupt

Wenn ein System zum Einzelschritt angewiesen wird, führt es einen Befehl aus und stoppt dann. Der Inhalt von Registern und Speicherstellen kann untersucht werden; Wenn sie korrekt sind, kann das System angewiesen werden, die nächste Anweisung auszuführen. Das Intel 8086- Trap-Flag und die Interrupt- Antwort vom Typ 1 erleichtern die Implementierung einer Einzelschrittfunktion in einem 8086-basierten System. Wenn das Trap-Flag gesetzt ist, führt der 8086 nach Ausführung jedes Befehls automatisch einen Typ-1-Interrupt durch. Wenn der 8086 einen Interrupt vom Typ 1 ausführt, wird das Flag-Register auf dem Stapel verschoben .

Rahmen

Der 8086 hat keine Anweisung, das Trap-Flag direkt zu setzen oder zurückzusetzen. Diese Operationen werden ausgeführt, indem das Flag-Register auf dem Stapel verschoben wird, das Trap-Flag-Bit auf das geändert wird, was der Programmierer möchte, und dann das Flag-Register wieder vom Stapel entfernt wird. Die Anweisungen zum Setzen des Trap-Flags lauten:

PUSHF                   ; Push flags on stack
MOV BP,SP               ; Copy SP to BP for use as index
OR WORD PTR[BP+0],0100H ; Set TF flag
POPF                    ; Restore flag Register

Tatsächlich verwenden Sie das Trap-Flag nicht auf diese Weise, da Sie normalerweise ein Programm von einer Interrupt Service Routine (ISR) aus überwachen. Sie setzen die Ausführung des Programms durch ein IRET fort.

Int3ServiceRoutine:       ; Stack: Ret, Flags
  PUSHA                   ; Stack: Ret, Flags, AX, CX, DX, BX, SP, BP, SI, DI
  PUSH DS
  PUSH ES                 ; Stack: Ret, Flags, AX, CX, DX, BX, SP, BP, SI, DI, DS, ES

   ... the ISR code using only integer (otherwise you must also store floating point registers)

  MOV BP,SP               ; Stack: Ret, Flags, AX, CX, DX, BX, SP, BP, SI, DI, DS, ES
  MOV BP,[BP+10]          ; Stored SP
  OR WORD PTR[BP+0],0100H ; Set TF flag in the stored Flag register
  POP ES
  POP DS
  POPA
  IRET                    ; continue execution for ONE instruction, then calling ISR again.

Zurücksetzen

Um das Trap-Flag zurückzusetzen, ersetzen Sie einfach den ODER-Befehl in der vorhergehenden Sequenz durch den Befehl:

UND WORT PTR [BP + 0], 0FEFFH

Das Trap-Flag wird zurückgesetzt, wenn der 8086 einen Interrupt vom Typ 1 ausführt, sodass der Einzelschrittmodus während des Interrupt-Service-Vorgangs deaktiviert wird.

Statusregister
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 (Bitposition)
- - - - - - - - Ö D. ich T. S. Z. - - EIN - - P. - - C. Flaggen