Ontwerp en bouw een besturingssysteem/Werking van de PC/Registers

Uit Wikibooks
Naar navigatie springen Naar zoeken springen

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.

Informatie afkomstig van http://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.