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.
|