EFLAGS — Änderungen 3478 → 3949

Zeile 1: Zeile 1:
 
Das EFLAGS (Programmstatus und Kontrollregister) Register ist 32 Bit groß, wobei jedes Bit ein Flag repräsentiert. Es beinhaltet Status-Informationen über das laufende Programm und erlaubt anwendungsbasierte Prozessorkontrolle. Das Register kann nicht komplett verändert werden, es können nur die einzelnen Flags gesetzt oder gelöscht werden, meistens auch nur indirekt, in der Form das ein aufgerufener Befehl ein Flag als nebeneffekt ändert.
 
Das EFLAGS (Programmstatus und Kontrollregister) Register ist 32 Bit groß, wobei jedes Bit ein Flag repräsentiert. Es beinhaltet Status-Informationen über das laufende Programm und erlaubt anwendungsbasierte Prozessorkontrolle. Das Register kann nicht komplett verändert werden, es können nur die einzelnen Flags gesetzt oder gelöscht werden, meistens auch nur indirekt, in der Form das ein aufgerufener Befehl ein Flag als nebeneffekt ändert.
  
−
== Aufbau des EFLAGS-Registers ==
+
{| {{Prettytable}} align="right"
−
 
+
|+ eFLAGS-Register
−
Im folgenden steht (X) für Systemflag, (S) für Statusflag und (C) für Controlflag
 
−
<center>
 
−
{| border="1" cellspacing="0"
 
 
|-
 
|-
−
! Bit
+
! Bit !! Beschreibung
−
! Beschreibung
 
 
|-
 
|-
−
| 22-31 || Reserviert, nicht verändern
+
| 22-31 || bgcolor="#bbb" | Reserviert, nicht verändern
 
|-
 
|-
 
| 21 || [[#ID - Identification Flag (Bit 21)|ID - ID Flag]] (X)
 
| 21 || [[#ID - Identification Flag (Bit 21)|ID - ID Flag]] (X)
 
|-
 
|-
−
| 20 || [[#VIP - Virtual Interrupt Pending Flag (Bit 20)|VIP - <b>V</b>irtual <b>I</b>nterrupt <b>P</b>ending]] (X)
+
| 20 || [[#VIP - Virtual Interrupt Pending Flag (Bit 20)|VIP - '''V'''irtual '''I'''nterrupt '''P'''ending]] (X)
 
|-
 
|-
−
| 19 || [[#VIF - Virtual Interrupt Flag (Bit 19)|VIF - <b>V</b>irtual <b>I</b>nterrupt <b>F</b>lag]] (X)
+
| 19 || [[#VIF - Virtual Interrupt Flag (Bit 19)|VIF - '''V'''irtual '''I'''nterrupt '''F'''lag]] (X)
 
|-
 
|-
−
| 18 || [[#AC - Alignment Check Flag (Bit 18)|AC - <b>A</b>lignment <b>C</b>heck]] (X)
+
| 18 || [[#AC - Alignment Check Flag (Bit 18)|AC - '''A'''lignment '''C'''heck]] (X)
 
|-
 
|-
−
| 17 || [[#VM - Virtual-8086 Mode Flag (Bit 17)|VM - <b>V</b>irtual 8086 <b>M</b>ode]] (X)
+
| 17 || [[#VM - Virtual-8086 Mode Flag (Bit 17)|VM - '''V'''irtual 8086 '''M'''ode]] (X)
 
|-
 
|-
−
| 16 || [[#RF - Resume Flag (Bit 16)|RF - <b>R</b>esume <b>F</b>lag]] (X)
+
| 16 || [[#RF - Resume Flag (Bit 16)|RF - '''R'''esume '''F'''lag]] (X)
 
|-
 
|-
−
| 15 || Reserviert, nicht ändern
+
| 15 || bgcolor="#bbb" | Reserviert, nicht ändern
 
|-
 
|-
−
| 14 || [[#NT - Nested Task Flag (Bit 14)|NT - <b>N</b>ested <b>T</b>ask Flag]] (X)
+
| 14 || [[#NT - Nested Task Flag (Bit 14)|NT - '''N'''ested '''T'''ask Flag]] (X)
 
|-
 
|-
−
| 13 - 12 || [[#IOPL - I/O Privilege Field (Bits 12 und 13)|IOPL - <b>I</b>/<b>O</b> <b>P</b>rivilege <b>L</b>evel]] (X)
+
| 13 - 12 || [[#IOPL - I/O Privilege Field (Bits 12 und 13)|IOPL - '''I'''/'''O''' '''P'''rivilege '''L'''evel]] (X)
 
|-
 
|-
−
| 11 ||  [[#OF - Overflow Flag (Bit 11)|OF - <b>O</b>verflow <b>F</b>lag]] (S)
+
| 11 ||  [[#OF - Overflow Flag (Bit 11)|OF - '''O'''verflow '''F'''lag]] (S)
 
|-
 
|-
−
| 10 || [[#DF - Direction Flag (Bit 10)|DF - <b>D</b>irection <b>F</b>lag]] (C)
+
| 10 || [[#DF - Direction Flag (Bit 10)|DF - '''D'''irection '''F'''lag]] (C)
 
|-
 
|-
−
| 9 || [[#IF - Interrupt Enable Flag (Bit 9)|IF - <b>I</b>nterrupt <b>E</b>nable Flag]] (X)
+
| 9 || [[#IF - Interrupt Enable Flag (Bit 9)|IF - '''I'''nterrupt '''E'''nable Flag]] (X)
 
|-
 
|-
−
| 8 || [[#TF - Trap Flag (Bit 8)|TF - <b>T</b>rap <b>F</b>lag]] (X)
+
| 8 || [[#TF - Trap Flag (Bit 8)|TF - '''T'''rap '''F'''lag]] (X)
 
|-
 
|-
−
| 7 || [[#SF - Sign Flag (Bit 7)|SF - <b>S</b>ign <b>F</b>lag]] (S)
+
| 7 || [[#SF - Sign Flag (Bit 7)|SF - '''S'''ign '''F'''lag]] (S)
 
|-
 
|-
−
| 6 || [[#ZF - Zero Flag (Bit 6)|ZF - <b>Z</b>ero <b>F</b>lag]] (S)
+
| 6 || [[#ZF - Zero Flag (Bit 6)|ZF - '''Z'''ero '''F'''lag]] (S)
 
|-
 
|-
−
| 5 || Reserviert, nicht ändern
+
| 5 || bgcolor="#bbb" | Reserviert, nicht ändern
 
|-
 
|-
−
| 4 || [[#AF - Adjust Flag (Bit 4)|AF - <b>A</b>uxiliary Carry <b>F</b>lag]] (S)
+
| 4 || [[#AF - Auxiliary Carry Flag (Bit 4)|AF - '''A'''uxiliary Carry '''F'''lag]] (S)
 
|-
 
|-
−
| 3 || Reserviert, nicht ändern
+
| 3 || bgcolor="#bbb" | Reserviert, nicht ändern
 
|-
 
|-
−
| 2 || [[#PF - Parity Flag (Bit 2)|PF - <b>P</b>arity <b>F</b>lag]] (S)
+
| 2 || [[#PF - Parity Flag (Bit 2)|PF - '''P'''arity '''F'''lag]] (S)
 
|-
 
|-
−
| 1 || Reserviert, nicht ändern
+
| 1 || bgcolor="#bbb" | Reserviert, nicht ändern
 
|-
 
|-
−
| 0 || [[#CF - Carry Flag (Bit 0)|CF - <b>C</b>arry <b>F</b>lag]] (S)
+
| 0 || [[#CF - Carry Flag (Bit 0)|CF - '''C'''arry '''F'''lag]] (S)
 +
|-
 +
| colspan="2" | ''(X) Systemflag, (S) Statusflag, (C) Controlflag''
 
|}
 
|}
−
</center>
+
 
−
<br />
 
 
=== Statusflags ===
 
=== Statusflags ===
  
Zeile 66: Zeile 63:
 
Gesetzt wenn das niederwertige Byte des Ergebnisses eine gerade Anzahl an 1er Bits enthält.
 
Gesetzt wenn das niederwertige Byte des Ergebnisses eine gerade Anzahl an 1er Bits enthält.
  
−
==== AF - Adjust Flag (Bit 4) ====
+
==== AF - Auxiliary Carry Flag (Bit 4) ====
−
Gesetzt wenn ein Übertrag von Bit 3 stattgefunden hat.<br />
+
Gesetzt wenn ein Übertrag von Bit&nbsp;3 auf Bit&nbsp;4 stattgefunden hat.<br />
 
Wird hauptsächlich für [[BCD]] Berechnungen verwendet.
 
Wird hauptsächlich für [[BCD]] Berechnungen verwendet.
  
Zeile 80: Zeile 77:
 
Gesetzt wenn ein Overflow bei einer signed-Zahl stattgefunden hat.
 
Gesetzt wenn ein Overflow bei einer signed-Zahl stattgefunden hat.
  
−
<br />
 
 
=== Controlflags ===
 
=== Controlflags ===
 
==== DF - Direction Flag (Bit 10) ====
 
==== DF - Direction Flag (Bit 10) ====
−
Gibt die Richtung bei Stringoperationen an.<br />
+
Gibt die Richtung bei Stringoperationen an. Wenn 0 wird der Zeiger inkrementiert, bei 1 dekrementiert.<br />
−
Wenn 0 wird der Zeiger inkrementiert, bei 1 dekrementiert.
+
Dieses Flag kann mit '''CLD'''(Clear Direction Flag) und '''STD'''(Set Direction Flag) verändert werden.
−
<br />
 
  
 
=== Systemflags ===
 
=== Systemflags ===
Zeile 93: Zeile 88:
 
==== IF - Interrupt Enable Flag (Bit 9) ====
 
==== IF - Interrupt Enable Flag (Bit 9) ====
 
Wenn gesetzt wird auf Interrupts reagiert, wenn gelöscht werden diese ignoriert (Ausnahme: [[NMI|Non Maskable Interrupts]]).<br />
 
Wenn gesetzt wird auf Interrupts reagiert, wenn gelöscht werden diese ignoriert (Ausnahme: [[NMI|Non Maskable Interrupts]]).<br />
−
Kann mit CLI (Clear Interruptflag) und STI (Set Interruptflag) geändert werden.
+
Kann mit '''CLI'''(Clear Interruptflag) und '''STI'''(Set Interruptflag) geändert werden.
  
 
==== IOPL - I/O Privilege Field (Bits 12 und 13) ====
 
==== IOPL - I/O Privilege Field (Bits 12 und 13) ====
Zeile 108: Zeile 103:
  
 
==== AC - Alignment Check Flag (Bit 18) ====
 
==== AC - Alignment Check Flag (Bit 18) ====
−
Wenn dieses Flag un das AM-Bit im [[Control Register|CR0-Register]] gesetzt ist wird auf Speicherausrichtung geprüft.
+
Wenn dieses Flag und das AM-Bit im [[Control Register|CR0-Register]] gesetzt ist wird auf Speicherausrichtung geprüft.
  
 
==== VIF - Virtual Interrupt Flag (Bit 19) ====
 
==== VIF - Virtual Interrupt Flag (Bit 19) ====
Zeile 120: Zeile 115:
  
 
==== ID - Identification Flag (Bit 21) ====
 
==== ID - Identification Flag (Bit 21) ====
−
Gesetzt wenn der Prozessor [[CPUID]] unterstützt.
+
Wenn dieses Bit von Software verändert werden kann, dann unterstützt der Prozessor den [[CPUID]]-Befehel
−
<br />
 
  
 
== Befehle zum direkten Verändern ==
 
== Befehle zum direkten Verändern ==