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.

Statusregister
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 (bitposition)
- - - - O D jag T S Z - A - P - C Flaggor