title: x86 寄存器 date: 2014-12-20 11:46:17 categories: 编程
tags: [x86, 寄存器]
X86家族CPU寄存器介绍。
x86家族CPU寄存器比较少,整理起来也比较方便,但是他们仍然可以分门别类, 现整理如下。
通用寄存器(general registers)
按照位数的不同,通用寄存器进一步分为8位、16位、32位通用寄存器,
32 bits: EAX, EBX, ECX, EDX 16 bits: AX, BX, CX, DX 8 bits: AH AL, BH BL, CH CL, DH DL
其中,"E"表示extended,"H"表示high byte,"L"表示low byte。 A、B、C、D四组通用寄存器其实也是有自己的专长的,而不仅仅是按照字母顺序命名而已,
EAX, AX, AH, AL:
Accumulator register,它们用于I/O port access, arithmetic, interrupt calls etc.
EBX, BX, BH, BL:
Base register,它们被当做base pointer for memory access
ECX, CX, CH, CL:
Counter register,它们被当做loop counter and for shifts
EDX, DX, DH, DL:
Data register,它们用于I/O port access, arithmetic, some interrupt etc.
段寄存器(segment registers)
CS: code segment DS: data segment ES, FS, GS: extra segment. 用于far pointer addressing like video memory and such SS: stack segment
索引和指针寄存器(index and pointers)
ES:EDI, EDI, DI: Destination index register. Used for string, memory array copying and setting and for far pointer addressing with ES
DS:ESI, EDI, SI: Source index register. Used for string and memory array copying
SS:EBP, EBP, BP: Stack Base pointer register. Holds the base address of the stack
SS:ESP, ESP, SP: Stack pointer register. Holds the top address of the stack
CS:EIP, EIP, IP:
Index Pointer. Holds the offset of the next instruction. It can only be read
标志位寄存器(flag register)
标志位寄存器只有一个: EFLAGS,各个bit的含义如下,
/*
Bit Label Desciption
---------------------------
0 CF Carry flag
2 PF Parity flag
4 AF Auxiliary carry flag
6 ZF Zero flag
7 SF Sign flag
8 TF Trap flag
9 IF Interrupt enable flag
10 DF Direction flag
11 OF Overflow flag
12-13 IOPL I/O Priviledge level
14 NT Nested task flag
16 RF Resume flag
17 VM Virtual 8086 mode flag
18 AC Alignment check flag (486+)
19 VIF Virutal interrupt flag
20 VIP Virtual interrupt pending flag
21 ID ID flag
Those that are not listed are reserved by Intel.
*/
控制寄存器(controll registers)
CR0: 开启/关闭 保护模式 CR1: CR2: CR3: CR4:
调试寄存器(debug registers)
DR0 ~ DR7
测试寄存器(test registers)
TR3 ~ TR7
其他寄存器
GDTR: Global Descriptor Table Register LDTR: Local Descriptor Table Register IDTR: Interrupt Descriptor Table Register TR:
这篇文章大部分内容来自这里,致谢。