EFLAGS
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.
Bit | Beschreibung |
---|---|
22-31 | Reserviert, nicht verändern |
21 | ID - ID Flag (X) |
20 | VIP - Virtual Interrupt Pending (X) |
19 | VIF - Virtual Interrupt Flag (X) |
18 | AC - Alignment Check (X) |
17 | VM - Virtual 8086 Mode (X) |
16 | RF - Resume Flag (X) |
15 | Reserviert, nicht ändern |
14 | NT - Nested Task Flag (X) |
13 - 12 | IOPL - I/O Privilege Level (X) |
11 | OF - Overflow Flag (S) |
10 | DF - Direction Flag (C) |
9 | IF - Interrupt Enable Flag (X) |
8 | TF - Trap Flag (X) |
7 | SF - Sign Flag (S) |
6 | ZF - Zero Flag (S) |
5 | Reserviert, nicht ändern |
4 | AF - Auxiliary Carry Flag (S) |
3 | Reserviert, nicht ändern |
2 | PF - Parity Flag (S) |
1 | Reserviert, nicht ändern |
0 | CF - Carry Flag (S) |
(X) Systemflag, (S) Statusflag, (C) Controlflag |
Inhaltsverzeichnis
- 1 Statusflags
- 2 Controlflags
- 3 Systemflags
- 3.1 TF - Trap Flag (Bit 8)
- 3.2 IF - Interrupt Enable Flag (Bit 9)
- 3.3 IOPL - I/O Privilege Field (Bits 12 und 13)
- 3.4 NT - Nested Task Flag (Bit 14)
- 3.5 RF - Resume Flag (Bit 16)
- 3.6 VM - Virtual 8086 Mode Flag (Bit 17)
- 3.7 AC - Alignment Check Flag (Bit 18)
- 3.8 VIF - Virtual Interrupt Flag (Bit 19)
- 3.9 VIP - Virtual Interrupt Pending Flag (Bit 20)
- 3.10 ID - Identification Flag (Bit 21)
- 4 Befehle zum direkten Verändern
- 5 RFLAGS
Statusflags
Die Statusflags (Bits 0, 2, 4, 6, 7, 11) geben das Ergebnis einer arithmetischen Operation an (z. B.: ADD, SUB, MUL, DIV). Verwendet werden sie normalerweise in Verbindung mit bedingten Sprüngen, sets, movs und loops (Jcc, SETcc, MOVcc, LOOPcc; cc = conditional code).
CF - Carry Flag (Bit 0)
Zeigt einen Overflow bei vorzeichenlosen Berechnungen an.
PF - Parity Flag (Bit 2)
Gesetzt, wenn das niederwertige Byte des Ergebnisses eine gerade Anzahl an gesetzten Bits enthält.
AF - Auxiliary Carry Flag (Bit 4)
Gesetzt, wenn ein Übertrag von Bit 3 auf Bit 4 stattgefunden hat.
Wird hauptsächlich für BCD-Berechnungen verwendet.
ZF - Zero Flag (Bit 6)
Gesetzt, wenn das Ergebnis 0 ist.
SF - Sign Flag (Bit 7)
Entspricht dem höchstwertigen Bit des Ergebnisses, also dem Vorzeichenbit bei vorzeichenbehafteten Berechnungen.
0 steht für einen positiven Wert und 1 für einen negativen.
OF - Overflow Flag (Bit 11)
Gesetzt, wenn ein Overflow bei einer signed-Zahl stattgefunden hat.
Controlflags
DF - Direction Flag (Bit 10)
Gibt die Richtung bei Stringoperationen an. 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.
Systemflags
TF - Trap Flag (Bit 8)
Für schrittweises Debuggen.
IF - Interrupt Enable Flag (Bit 9)
Wenn es gesetzt ist, dann wird auf Interrupts reagiert, ist es gelöscht, so werden diese ignoriert (Ausnahme: Non Maskable Interrupt).
Kann mit CLI (Clear Interruptflag) und STI (Set Interruptflag) geändert werden.
IOPL - I/O Privilege Field (Bits 12 und 13)
Gibt an, ab welcher Privilegstufe alle I/O-Ports (und nicht nur per I/O-Port-Bitmap ausgewählte) benutzt werden dürfen.
NT - Nested Task Flag (Bit 14)
Gesetzt, wenn der akuelle Task eine Verbindung zum vorherigen hat.
RF - Resume Flag (Bit 16)
Steuert die Reaktion des Prozessors auf eine Debug Exception.
VM - Virtual 8086 Mode Flag (Bit 17)
Gesetzt, um im Virtual 8086 Mode zu arbeiten.
AC - Alignment Check Flag (Bit 18)
Wenn dieses Flag und das AM-Bit im CR0-Register gesetzt ist, wird auf Speicherausrichtung geprüft.
VIF - Virtual Interrupt Flag (Bit 19)
Das Interruptflag für den Virtual 8086 Mode.
VIP - Virtual Interrupt Pending Flag (Bit 20)
Gesetzt, um anzuzeigen, dass ein Interrupt abgearbeitet werden muss (Das Betriebssystem setzt und löscht dieses Flag, der Prozessor liest es nur). Genutzt wird es in Verbindung mit dem Virtual Interrupt Flag.
ID - Identification Flag (Bit 21)
Wenn dieses Bit von Software verändert werden kann, dann unterstützt der Prozessor den CPUID-Befehl.
Befehle zum direkten Verändern
- PUSHF
- PUSHFD
- POPF
- POPFD
- LAHF
- SAHF
RFLAGS
Das RFLAGS Register ist die 64-Bit Variante von EFLAGS. Allerdings hat sich abgesehen von der Tatsache, dass das Register jetzt 64 Bit breit ist, nichts geändert. Die Bits 32-63 sind reserviert und geben immer 0 zurück.