Vlajka pasti - Trap flag
Trap flag umožňuje provoz procesoru v jedno- kroku režimu. Pokud je takový příznak k dispozici, mohou ho debuggery použít k provedení procesu počítačového programu .
Jednostupňové přerušení
Když je systém instruován k jednostupňovému provedení, provede jednu instrukci a poté se zastaví. Lze zkoumat obsah registrů a paměťových míst; pokud jsou správné, lze systému říct, aby pokračoval a provedl další instrukci. Intel 8086 past vlajky a typ-1 přerušení reakce, aby bylo poměrně snadno implementovat funkce krokování v systému 8086 založeného. Pokud je nastaven příznak trapu, 8086 automaticky provede přerušení typu 1 po provedení každé instrukce. Když 8086 provede přerušení typu 1, posune registr příznaků v zásobníku .
Nastavení
8086 nemá žádné instrukce přímo nastavit nebo zrušit příznak pasti. Tyto operace se provádějí zatlačením na příznakový registr na zásobníku, změnou bitového příznaku pasti na to, co chce programátor, a následným vyjmutím příznakového registru zpět ze zásobníku. Pokyny pro nastavení příznaku pasti jsou:
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
Vlastně tímto způsobem nepoužíváte příznak Trap, protože obvykle monitorujete program z rutiny přerušení služby (ISR). Pokračujete v provádění programu pomocí IRET.
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.
Resetování
Chcete-li resetovat příznak trapu, jednoduše nahraďte instrukci OR v předchozím pořadí instrukcí:
- AND WORD PTR [BP + 0], 0FEFFH
Příznak depeše se resetuje, když 8086 provede přerušení typu 1, takže jednokrokový režim bude během procedury přerušení služby deaktivován.
|