Die Register der 80x86-Familie hatten bis zu 80286 16-Bit-Register. Ab dem 80386 wurden daraus 32-Bit-Register. Um zwischen den unterschiedlichen Grössen zu unterscheiden setzt man für 32-Bit ein E (Extended) vor den Namen. In der folgenden Aufstellung werden immer die vollen Namen geschrieben
Name | F E D C B A 9 8 7 6 5 4 3 2 1 0 | F E D C B A 9 8 7 6 5 4 3 2 1 0 |
-----+---------------------------------------------------------------+---------------------------------------------------------------+
Prozessorregister:||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-----+---------------------------------------------------------------+---------------------------------------------------------------+
EIP | Befehlszähler | IP |
-----|---------------------------------------------------------------+---------------------------------------------------------------|
ESP | Stackpointer | SP |
-----|-------------------------------------------------------+---+---+---+---+-------+---+---+---+---+---+---+---+---+---+---+---+---|
EFLAG| | V | R | | N | IOPL | O | D | I | T | S | Z | | A | | P | | C |(niederwertigere 16 Bit heissen FLAG)
-----+-------------------------------------------------------+---+---+---+---+-------+---+---+---+---+---+---+---+---+---+---+---+---+
Allzweckregister:||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-----+---------------------------------------------------------------+-------------------------------+-------------------------------+
EAX | Akkumulator | AH AX AL |
-----|---------------------------------------------------------------|-------------------------------|-------------------------------|
EBX | Basisregister | BH BX BL |
-----|---------------------------------------------------------------|-------------------------------|-------------------------------|
ECX | Count-Register | CH CX CH |
-----|---------------------------------------------------------------|-------------------------------|-------------------------------|
EDX | Daten-Register | DH DX DH |
-----|---------------------------------------------------------------|-------------------------------+-------------------------------|
ESI | Source-Index | SI |
-----|---------------------------------------------------------------|---------------------------------------------------------------|
EDI | Destination-Index | DI |
-----|---------------------------------------------------------------|---------------------------------------------------------------|
EBP | Basis-Pointer | BP |
-----+---------------------------------------------------------------+---------------------------------------------------------------+
Segmentregister:||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-----+---------------------------------------------------------------+||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CS | Code-Segment |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-----|---------------------------------------------------------------|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SS | Stack-Segment |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-----|---------------------------------------------------------------|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DS | Daten-Segment |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-----|---------------------------------------------------------------|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ES | Extra-Segment 1 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-----|---------------------------------------------------------------|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
FS | Extra-Segment 2 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-----|---------------------------------------------------------------|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GS | Extra-Segment 3 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-----+---------------------------------------------------------------+||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Steuerregister:|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-----+-------------------------------------------------------------------------------+-----------------------------------------------+
CR3 | Page-Directory-Basisregister (20 Bit) | |
-----|-------------------------------------------------------------------------------+-----------------------------------------------|
CR2 | Lineare Adresse des Page-Faults |
-----|-------------------------------------------------------------------------------------------------------------------------------|
CR1 | |
-----|---+-----------------------------------------------------------+-------------------------------------------+---+---+---+---+---|
CR0 | PG| | Machine-status-word | ET| TS| EC| MP| PE|
-----+---+-----------------------------------------------------------+-------------------------------------------+---+---+---+---+---+
Pagingregister:|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-----+---------------------------------------------------------------+||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TR | TSS-Selektor |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---------------------------------------------------------------+---------------------------------------------------------------+
| TSS-Basisadresse |
|-------------------------------------------------------------------------------+-----------------------------------------------+
| TSS-Limit |||||||||||||||||||||||||||||||||||||||||||||||||
-----|---------------------------------------------------------------+---------------+||||||||||||||||||||||||||||||||||||||||||||||||
LDTR | LDT-Selektor |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---------------------------------------------------------------+---------------------------------------------------------------+
| LDT-Basisadresse |
|-------------------------------------------------------------------------------+-----------------------------------------------+
| LDT-Limit |||||||||||||||||||||||||||||||||||||||||||||||||
-----|-------------------------------------------------------------------------------+-----------------------------------------------+
IDT | IDT-Basisadresse |
|-------------------------------------------------------------------------------+-----------------------------------------------+
| IDT-Limit |||||||||||||||||||||||||||||||||||||||||||||||||
-----|-------------------------------------------------------------------------------+-----------------------------------------------+
GDTR | GDT-Basisadresse |
|-------------------------------------------------------------------------------+-----------------------------------------------+
| GDT-Limit |||||||||||||||||||||||||||||||||||||||||||||||||
-----|-------------------------------------------------------------------------------+||||||||||||||||||||||||||||||||||||||||||||||||
zusätzlich noch zwei Testregister TR6 und TR7 à je 32 Bit
und die 8 debug-Register DR0 bis DR7 à je 32 Bit.
Hier eine kurze Umschreibung der Register:
EIP, IP
Der Instruction-Pointer. Er beinhaltet die Adresse des nächsten einzulesenden Befehls.ESP, SP
Der Stack-Pointer. Er zeigt stets auf die aktuelle Position im StackEFLAG, FLAG
Die FLAGs des Prozessors. Sie haben im einzelnen folgende Bedeutung (von rechts nach links):C: Carry-Flag
C ist eins, wenn nach einer Operation das Resultat nicht mehr in einem Register Platz fand, also sozusagen an Bit 32 oder höher (das höchst-mögliche wäre 31) eine 1 gesetzt werden müsste. Achtung, dies ist nicht gleichbedeutend mit dem Overflow-Flag.P: Parity-Flag
P ist eins, wenn nach einer Operation die 8 niederwertigen Bits des Ergebnisses eine gerade Anzahl an Einsen enthält.A: Auxiliary-Flag
A ist eins, wenn nach einer Operation das Resultat nicht mehr in einem Nibble (4 Bit) Platz fand, also sozusagen an Bit 4 oder höher eine 1 gesetzt werden müsste. Dies wird für die BCD-Zahlen gebraucht.Z: Zero-Flag
Z ist eins, wenn nach einer Operation das Resultat null ist.S: Sign-Flag
S ist eins, wenn nach einer Operation das Resultat negativ ist. Dieses Flag wird auch gesetzt, wenn es sich bei der Operation um eine vorzeichenlose Rechnung handelte. Es hat jedoch keinerlei Einfluss auf das Resultat.T: Trap-Flag
T kann vom User auf 0 oder 1 gesetzt werden (aber nur über einen Trick). Wenn T=1, dann wird nach jedem Prozessorschritt der Interrupt 1 aufgerufen. Wird für debugging benutzt.I: Interrupt-Enable-Flag
I kann vom User auf 0 (CLI) oder 1 (STI) gesetzt werden. Wenn T=0, dann werden maskierbare Interrupts (auch Hardware-) nicht abgearbeitet.D: Direction-Flag
D kann vom User auf 0 (CLD) oder 1 (STD) gesetzt werden. Wenn D=1, dann werden Stringverarbeitungsbefehle mit aufsteigenden Adressen abgearbeitet, wenn D=0, mit absteigenden.O: Overflow-Flag
O ist eins, wenn nach einer Operation das Resultat nicht mehr in einer Zahl mit Vorzeichen Platz fand, also sozusagen an Bit 31 oder höher (Bit 31 ist das Vorzeichen) eine 1 gesetzt werden müsste. Achtung, dies ist nicht gleichbedeutend mit dem Carry-Flag.IOPL: Input-Output-Protection-Level-Flag, ab 80286
Diese 2 Bits geben die minimal benötigte Schutzebene für Ein- und Ausgabeoperationen für den I/O-Adressraum an..N: Nested-Task-Flag, ab 80286
Wenn N=1, dann befindet sich im Speicher ein wartender (unterbrochener) Task.R: Resume-Flag, ab 80386
Wenn R=1, dann kann nach einer debug-Operation an einem Breakpoint dieselbe Operation nochmals ausgeführt werden, ohne dass sogleich wieder ein Stopp auftritt.V: Virtual-8086-Mode-Flag, ab 80386
Dieses Flag wird benutzt, um den Prozessor in den Virtual-8086-Modus umzuschalten. (Tönt einfacher, als es in Wirklichkeit ist)
EAX, AX, AH, AL
Der Akkumulator. Dieses Allzweckregister erfüllt die Zwecke: Rechnen, Input-/Output, Zwischenspeichern, ...EBX, BX, BH, BL
Das Basis-Register. Dieses Allzweckregister erfüllt die Zwecke: Adressierung des Hauptspeichers, Rechnen, Zwischenspeichern, ...ECX, CX, CH, CL
Das Count-Register. Dieses Allzweckregister erfüllt die Zwecke: Schleifen, Rechnen, Zwischenspeichern, ...EDX, DX, DH, DL
Das Daten-Register. Dieses Allzweckregister erfüllt die Zwecke: Portansteuerung, Rechnen, Zwischenspeichern, ...ESI, SI
Der Source-Index. Dieses Allzweckregister erfüllt zusammen mit dem EBX-Register den Zweck, für Stringoperationen auf die Quelle zu zeigen.EDI, DI
Der Destination-Index. Dieses Allzweckregister erfüllt zusammen mit dem EDX-Register den Zweck, für Stringoperationen auf das Ziel zu zeigen.EBP, BP
Der Basiszeiger. Dieses Allzweckregister zeigt normalerweise auf den ersten Eintrag eines Stack-Frames.CS
Das Code-Segment. Dieses Segment zeigt stets auf den Speicherblock, in dem sich die Befehle des laufenden Programmes befinden.SS
Das Stack-Segment. Dieses Segment zeigt stets auf den Speicherblock, in dem sich der Stack des laufenden Programmes befinden.DS
Das Daten-Segment. Dieses Segment zeigt stets auf den Speicherblock, in dem sich die Variablen des laufenden Programmes befinden.ES, FS, GS
Die Extra-Segmente. Diese Segmente stehen zur freien Verfügung. FS und GS stehen erst ab dem 80386 zur VerfügungCR3 bis CR0, ab 80386 (und teils 80286)
Dies sind die Steuer und Speicherverwaltungsregister des Prozessors. Die niederwertigen 16 Bit des CR0 sind bereits im 80286 enthalten. Dort heissen sie jedoch Machine-Status-Word. Im CR0 befinden sich FLAGs, die den Prozessor in den verschiedenen Betriebsmodi steuert. Sie sind folgendenmassen definiert (von rechts nach links):PE: Protection-Enable, ab 80286
Durch Setzen dieses einen Bits schaltet der Prozessor ab dem 80386 augenblicklick in den Protected Mode um. Beim 80286 musste man, um wieder in den Real-Mode zurückzukehren den Prozessor überlisten.MP: Monitor-Coprocessor, ab 80286
Wenn dieses Bit gesetzt ist, löst ein WAIT-Befehl einen Interrupt 7 aus: Kein Coprozessor vorhanden.EM: Emulate-Coprocessor, ab 80286
Wenn EM gesetzt ist, werden alle Coprozessorfunktionen durch Sorfware emuliert. Somit wird bei jedem Coprozessorbefehl der Interrupt 7 aufgerufen, wo sich die jeweiligen Funktionen befinden.TS: Task-Switched, ab 80286
Hier gibt ein gesetztes Bit an, ob ein Task-Switch aufgetreten ist. Falls der Coprozessor noch Daten liefert, kann somit entschieden werden, zu welchem Task diese Daten gehören.ET: Extension-Type, ab 80386
Dieses Bit gibt den Typ des Coprozessors an, womit der 80386 dann diesen korrekt ansteuern kann. Wenn ET=1, dann handelt es sich um einen 80387, sonst um einen 80287.PG: Paging, ab 80286
Durch dieses eine Bit wird die Paging-Unit aktiviert (P=1), oder deaktiviert (P=0).
TR
Das Task-Register. In TSS-Selektor wird die Nummer des aktiven Task gespeichert. Die TSS-Basisadresse gibt an, wo dessen Segment startet und TSS-Limit gibt die maximale Bytezahl an, die für diesen Task reserviert ist.LDTR
Das Local-Descriptor-Tabelle-Register. In LDT-Selektor wird die Nummer der aktiven lokalen Tabelle gespeichert. Die LDT-Basisadresse gibt an, wo dessen Segment startet und LDT-Limit gibt die maximale Bytezahl an, die für diesen Block reserviert ist.IDTR
Das Interrupt-Descriptor-Tabellen-Register. Die IDT-Basisadresse gibt an, wo das Segment startet und IDT-Limit gibt die maximale Bytezahl an, die für die Tabelle reserviert ist.GDTR
Das Global-Descriptor-Tabellen-Register. Die GDT-Basisadresse gibt an, wo das Segment startet und GDT-Limit gibt die maximale Bytezahl an, die für die Tabelle reserviert ist.TR6, TR7
Die Testregister. Sie dienen zur Prüfung eines internen Puffers.DR0 bis DR7
Die Debug-Register. Diese Segmente dienen dem Debuggen.