CPU Registers x86: Difference between revisions

From OSDev.wiki
Jump to navigation Jump to search
[unchecked revision][unchecked revision]
Content added Content deleted
m (Segment Registers ~> Protected Mode Registers (wrong caption))
(Added 64-bit registers, the EFER register and filled some "reserved" gaps instead of not listing the bits.)
Line 3: Line 3:
{| {{wikitable}}
{| {{wikitable}}
|-
|-
! 64 bit
! 32 bit
! 32 bit
! 16 bit
! 16 bit
! 8 high bit
! colspan="2" | 8 bit
! 8 low bit
! description
! description
|-
|-
! colspan="3" |
! high<sup>&dagger;</sup>
! low
!
|-
| rax
| eax
| eax
| ax
| ax
Line 15: Line 21:
| accumulator
| accumulator
|-
|-
| rbx
| ebx
| ebx
| bx
| bx
Line 21: Line 28:
| base
| base
|-
|-
| rcx
| ecx
| ecx
| cx
| cx
Line 27: Line 35:
| counter
| counter
|-
|-
| rdx
| edx
| edx
| dx
| dx
Line 34: Line 43:
|-
|-
|}
|}

<sup>&dagger;</sup>The 8-bit high registers cannot be accessed when a REX.W prefix is used in 64-bit mode.


==Segment Registers==
==Segment Registers==
Line 60: Line 71:
{| {{wikitable}}
{| {{wikitable}}
|-
|-
! 64 bit
! 32 bit
! 32 bit
! 16 bit
! 16 bit
! description
! description
|-
|-
| rsi
| esi
| esi
| si
| si
| source index
| source index
|-
|-
| rdi
| edi
| edi
| di
| di
Line 78: Line 92:
{| {{wikitable}}
{| {{wikitable}}
|-
|-
! 64 bit
! 32 bit
! 32 bit
! 16 bit
! 16 bit
! description
! description
|-
|-
| rbp
| ebp
| ebp
| bp
| bp
| base pointer
| base pointer
|-
|-
| rsp
| esp
| esp
| sp
| sp
| stack pointer
| stack pointer
|-
|-
| rip
| eip
| eip
|
| ip
| instruction pointer
| instruction pointer
|-
|-
|}
|}


==EFLAGS Register==
==FLAGS Register==


{| {{wikitable}}
{| {{wikitable}}
Line 103: Line 121:
! label
! label
! description
! description
|-
! colspan="3" | FLAGS
|-
|-
| 0
| 0
| cf
| cf
| carry flag
| carry flag
|-
| 1
|
| reserved
|-
|-
| 2
| 2
| pf
| pf
| parity flag
| parity flag
|-
| 3
|
| reserved
|-
|-
| 4
| 4
| af
| af
| auxiliary flag
| auxiliary flag
|-
| 5
|
| reserved
|-
|-
| 6
| 6
Line 147: Line 179:
| nt
| nt
| nested task flag
| nested task flag
|-
| 15
|
| reserved
|-
! colspan="3" | EFLAGS
|-
|-
| 16
| 16
Line 172: Line 210:
| id flag
| id flag
|-
|-
| 22-31
|
| reserved
|-
! colspan="3" | RFLAGS
|-
| 22-63
|
| reserved
|}
|}


Line 207: Line 254:
| ne
| ne
| numeric error
| numeric error
|-
| 6-15
|
| reserved
|-
|-
| 16
| 16
| wp
| wp
| write protect
| write protect
|-
| 17
|
| reserved
|-
|-
| 18
| 18
| am
| am
| alignment mask
| alignment mask
|-
| 19-28
|
| reserved
|-
|-
| 29
| 29
Line 316: Line 375:
| osxmmexcpt
| osxmmexcpt
| os support for unmasked simd floating point exceptions
| os support for unmasked simd floating point exceptions
|-
| 11
|
| reserved
|-
| 12
|
| reserved
|-
|-
| 13
| 13
Line 324: Line 391:
| smxe
| smxe
| safer mode extensions enable
| safer mode extensions enable
|-
| 15
|
| reserved
|-
| 16
|
| reserved
|-
|-
| 17
| 17
Line 332: Line 407:
| osxsave
| osxsave
| xsave and processor extended states enable
| xsave and processor extended states enable
|-
| 19
|
| reserved
|-
|-
| 20
| 20
Line 341: Line 420:
| supervisor mode access protection enable
| supervisor mode access protection enable
|-
|-
| 22
| pke
| protection key enable
|-
| 23-31
|
| reserved
|}
|}

====EFER====
{| {{wikitable}}
|-
! bit
! name
! description
|-
| 0
| sce
| system call extensions
|-
| 1-7
|
| reserved
|-
| 8
| lme
| long mode enable
|-
| 9
|
| reserved
|-
| 10
| lma
| long mode active
|-
| 11
| nxe
| no-execute enable
|-
| 12
| svme
| secure virtual machine enable
|-
| 13
| lmsle
| long mode segment limit enable
|-
| 14
| ffxsr
| fast fxsave/fxrstor
|-
| 15
| tce
| translation cache extension
|-
| 16-63
|
| reserved
|}



==Debug Registers==
==Debug Registers==

Revision as of 18:25, 6 December 2015

General Purpose Registers

64 bit 32 bit 16 bit 8 bit description
high low
rax eax ax ah al accumulator
rbx ebx bx bh bl base
rcx ecx cx ch cl counter
rdx edx dx dh dl data

The 8-bit high registers cannot be accessed when a REX.W prefix is used in 64-bit mode.

Segment Registers

16 bit description
cs code segment
ds data segment
es, fs, gs extra segment
ss stack segment

Index Registers

64 bit 32 bit 16 bit description
rsi esi si source index
rdi edi di destination index

Pointer Registers

64 bit 32 bit 16 bit description
rbp ebp bp base pointer
rsp esp sp stack pointer
rip eip ip instruction pointer

FLAGS Register

bit label description
FLAGS
0 cf carry flag
1 reserved
2 pf parity flag
3 reserved
4 af auxiliary flag
5 reserved
6 zf zero flag
7 sf sign flag
8 tf trap flag
9 if interrupt flag
10 df direction flag
11 of overflow flag
12-13 iopl i/o priviledge level
14 nt nested task flag
15 reserved
EFLAGS
16 rf resume flag
17 vm virtual 8086 mode flag
18 ac alignment check flag
19 vif virtual interrupt flag
20 vip virtual interrupt pending
21 id id flag
22-31 reserved
RFLAGS
22-63 reserved

Control Registers

CR0

bit label description
0 pe protected mode enable
1 mp monitor co-processor
2 em emulation
3 ts task switched
4 et extension type
5 ne numeric error
6-15 reserved
16 wp write protect
17 reserved
18 am alignment mask
19-28 reserved
29 nw not-write through
30 cd cache disable
31 pg paging

CR1

Reserved

CR2

bit label description
0-31 pfla page fault linear address

CR3

bit description PAE mode long mode
0-31 physical base address of page directory base of PDPT base of PML4T

Note that this must be page aligned

CR4

bit label description
0 vme virtual 8086 mode extensions
1 pvi protected mode virtual interrupts
2 tsd time stamp disable
3 de debugging extensions
4 pse page size extension
5 pae physical address extension
6 mce machine check exception
7 pge page global enable
8 pce performance monitoring counter enable
9 osfxsr os support for fxsave and fxrstor instructions
10 osxmmexcpt os support for unmasked simd floating point exceptions
11 reserved
12 reserved
13 vmxe virtual machine extensions enable
14 smxe safer mode extensions enable
15 reserved
16 reserved
17 pcide pcid enable
18 osxsave xsave and processor extended states enable
19 reserved
20 smep supervisor mode executions protection enable
21 smap supervisor mode access protection enable
22 pke protection key enable
23-31 reserved

EFER

bit name description
0 sce system call extensions
1-7 reserved
8 lme long mode enable
9 reserved
10 lma long mode active
11 nxe no-execute enable
12 svme secure virtual machine enable
13 lmsle long mode segment limit enable
14 ffxsr fast fxsave/fxrstor
15 tce translation cache extension
16-63 reserved


Debug Registers

DR0 - DR3

Contain linear addresses of up to 4 breakpoints. If paging is enabled, they are translated to physical addresses.

DR6

It permits the debugger to determine which debug conditions have occurred. When an enabled debug exception is enabled, low order bits 0-3 are set before entering debug exception handler.

DR7

bit description
0 local DR0 breakpoint
1 global DR0 breakpoint
2 local DR1 breakpoint
3 global DR1 breakpoint
4 local DR2 breakpoint
5 global DR2 breakpoint
6 local DR3 breakpoint
7 global DR3 breakpoint
16-17 conditions for DR0
18-19 size of DR0 breakpoint
20-21 conditions for DR1
22-23 size of DR1 breakpoint
24-25 conditions for DR2
26-27 size of DR2 breakpoint
28-29 conditions for DR3
30-31 size of DR3 breakpoint

A local breakpoint bit deactivates on hardware task switches, while a global does not.
00b condition means execution break, 01b means a write watchpoint, and 11b means an R/W watchpoint. 10b is reserved for I/O R/W (unsupported).

Test Registers

name description
TR3 - TR5 undocumented
TR6 test command register
TR7 test data register

Protected Mode Registers

GDTR

bits label description
0-15 limit size of GDT
16-47 base starting address of GDT

LDTR

Stores the segment selector of the LDT.

IDTR

bits label description
0-15 limit size of IDT
16-47 base starting address of IDT