Trap flagga
En fällflagga tillåter drift av en processor i enstegsläge . Om en sådan flagga är tillgänglig debuggers använda den för att stega igenom körningen av ett datorprogram .
Enstegsavbrott
När ett system instrueras att göra ett steg, kommer det att utföra en instruktion och sedan stoppa. Innehållet i register och minnesplatser kan undersökas; om de är korrekta kan systemet uppmanas att fortsätta och köra nästa instruktion. Intel 8086 trap-flaggan och typ-1 avbrottssvar gör det ganska enkelt att implementera en enstegsfunktion i ett 8086-baserat system. Om trapflaggan är inställd kommer 8086 automatiskt att göra ett typ-1-avbrott efter att varje instruktion har körts. När 8086 gör ett typ-1-avbrott trycker den på flaggregistret på stacken .
Miljö
8086: an har ingen instruktion att direkt ställa in eller återställa trapflaggan. Dessa operationer görs genom att trycka på flaggregistret på stacken, ändra trapflaggbiten till vad programmeraren vill att det ska vara och sedan skjuta tillbaka flaggregistret från stacken. Instruktionerna för att ställa in trapflaggan är:
PUSHF ; Tryck flaggor på stack MOV BP,SP ; Kopiera SP till BP för användning som index ELLER ORD PTR[BP+0],0100H ; Ställ in TF-flagga POPF ; Återställ flaggregistret
Egentligen använder du inte Trap-flaggan på detta sätt, eftersom du normalt övervakar ett program från en Interrupt Service Routine (ISR). Du fortsätter att köra programmet av en 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 ... ISR- koden använder endast heltal (annars måste du också lagra flyttalsregister) MOV BP,SP ; Stack: Ret, Flags, AX, CX, DX, BX, SP , BP, SI, DI, DS, ES MOV BP,[BP+10] ; Lagrad SP ELLER ORD PTR[BP+0],0100H ; Ställ in TF-flagga i det lagrade flaggregistret POP ES POP DS POPA IRET ; fortsätt exekveringen för EN instruktion och anropa sedan ISR igen.
Återställning
För att återställa trapflaggan, ersätt helt enkelt ELLER-instruktionen i föregående sekvens med instruktionen:
- OCH ORD PTR[BP+0],0FEFFH
Trappflaggan återställs när 8086 gör ett typ-1-avbrott, så enstegsläget kommer att inaktiveras under avbrottsserviceproceduren.
|