Ontwerp en bouw een besturingssysteem/Werking van de PC/Registers
Elke processor heeft een aantal zogenaamde registers om argumenten en resultaten van berekeningen tijdelijk in op te slaan. Deze registers zijn veel sneller dan het werkgeheugen, of de caches.
Algemene registers
[bewerken]De algemene registers (General Purpose-Registers (of GPR) in het Engels) staan in onderstaande tabel. Merk op dat er van een aantal registers meerdere 'varianten' zijn, die verwijzen naar dezelfde registergeheugenplaats.
16-bit | 32-bit | 64-bit | Omschrijving |
---|---|---|---|
AX | EAX | RAX | Accumulatorregister, gebruikt voor de meeste berekeningen. |
DX | EDX | RDX | Dataregister, wordt gebruikt voor argumenten voor berekeningen, en als uitbreiding van het accumulatorregister. |
CX | ECX | RCX | Teller register (counter in het Engels), wordt gebruikt bij loops en jumps. |
BX | EBX | RBX | Basisregister, kan als extra register gebruikt worden. |
DI | EDI | RDI | Destinatie index register, wordt gebruikt bij string operaties. |
SI | ESI | RSI | Bron index register (source index in het Engels), wordt gebruikt bij string operaties. |
SP | ESP | RSP | Stack pointer, wijst naar de top van de stack. |
BP | EBP | RBP | Stack base pointer, wijst naar het begin van de stack. |
IP | EIP | RIP | Instructie pointer, houdt de programmateller (het adres van de huidige instructie) bij. |
- | - | R8...R15 | De 64 bit variant, voegt 8 general purpose 64 bit registers toe genaamd R8, R9, ... R15 |
Visueel zit dit er, voor de algemene registers (?AX, ?BX, ?CX, ?DX) uit zoals in onderstaande tabel:
64 | 56 | 48 | 40 | 32 | 24 | 16 | 8 |
---|---|---|---|---|---|---|---|
R?X | |||||||
E?X | |||||||
?X | |||||||
?H | ?L |
Bemerk dat de individuele bytes van de 16-bits registervarianten (AX, BX, CX en DX) te bereiken zijn via ?H en ?L
Statusregister
[bewerken]Een processor bevat naast een aantal algemene registers ook een statusregister, welke aangeeft in welke status de processor zich bevindt. Dit register bestaat eveneens in 16, 32 en 64 bit varianten genaamd FLAGS, EFLAGS en RFLAGS. Dit register heeft de volgende layout:
Intel x86 FLAGS Register | |||
---|---|---|---|
Bit # | Afkorting | Beschrijving | Categorie |
FLAGS | |||
0 | CF | Carry flag | Status flag |
1 | 1 | Gereserveerd | |
2 | PF | Parity flag | Status flag |
3 | 0 | Gereserveerd | |
4 | AF | Adjust flag | Status flag |
5 | 0 | Gereserveerd | |
6 | ZF | Zero flag | Status flag |
7 | SF | Sign flag | Status flag |
8 | TP | Trap flag (single step) | System flag |
9 | IF | Interrupt enable flag | System flag |
10 | DF | Direction flag | Control flag |
11 | OF | Overflow flag | Status flag |
12, 13 | IOPL | I/O privilege level (vanaf 286) | System flag |
14 | NT | Nested task flag (vanaf 286) | System flag |
15 | 0 | Gereserveerd | |
EFLAGS | |||
16 | RF | Resume flag (vanaf 386) | System flag |
17 | VM | Virtual-8086 mode flag (vanaf 386) | System flag |
18 | AC | Alignment check (vanaf 486SX) | System flag |
19 | VIF | Virtual interrupt flag (Pentium+) | System flag |
20 | VIP | Virtual interrupt pending (Pentium+) | System flag |
21 | ID | Identification (Pentium+) | System flag |
22 | 0 | Gereserveerd | |
23 | 0 | Gereserveerd | |
24 | 0 | Gereserveerd | |
25 | 0 | Gereserveerd | |
26 | 0 | Gereserveerd | |
27 | 0 | Gereserveerd | |
28 | 0 | Gereserveerd | |
29 | 0 | Gereserveerd | |
30 | 0 | Gereserveerd | |
31 | 0 | Reserved | |
RFLAGS | |||
32-63 | 0 | Gereserveerd |
Wanneer de voorgaande operatie een overflow tot gevolg had dan zal in dit register de carry-vlag hoog gezet worden. Ook kan hieruit geleerd worden in welke status de processor zich bevindt.