寄存器是CPU的组成部分。因为在CPU内部,所以CPU对其读写速度是最快的,不需要IO传输,但同时也决定了此类寄存器数量有限,有限到几乎每个寄存器都有自己的名字,而且有些还有多个名字。
IA-32构架提供了16个基本寄存器,这16个基本寄存器可以归纳为如下几类:
通用寄存器;
段寄存器;
状态和控制寄存器;
指令寄存器;
1.1 通用寄存器
32位通用寄存器有八个,主要用作逻辑运算/地址运算/内存指针,具体如下:
eax------累加和结果寄存器
ebx------数据指针寄存器
ecx------循环计数器
edx------i/o指针
esi------源地址寄存器
edi------目的地址寄存器
esp------堆栈指针
ebp------栈指针寄存器
32位通用寄存器有八个:eax/ebx/ecx/edx/esi/edi/esp/ebp.
这八个寄存器低16位分别有别名:ax/bx/cx/dx/si/di/sp/bp.
其中ax/bx/cx/dx的高八位有别名ah/bh/ch/dh,低八位有别名al/bl/cl/dl.
64-bit模式下寄存器扩展为rax/rbx/rcx/rdx/rsi/rdi/rsp/rbp/r8/r9/r10/r11/r12/r13/r14/r15.
其中r8/r9/r10/r11/r12/r13/r14/r15是64bit模式新加入的寄存器.
1.2 段寄存器
段寄存器cs/ds/es/fs/gs/ss,保存16位的段选择子,一个段选择子制定一个段在内存的指针,以便在内存访问段,访问方式与内存模式有关.
CS(Code Segment):代码段寄存器
DS(Data Segment),ES,FS,GS:数据段寄存器
SS(Stack Segment):堆栈段寄存器
ES(Extra Segment):附加段寄存器。
1.3 状态和控制寄存器eflags
这个寄存器表示意义非常丰富,程序不恩那个直接操作该寄存器,由操作指令操作。
除去保留位,其他每位都代表一个具体的含义,其中bits 0/2/4/6/7/11 是状态位,标识了某些操作后的状态,8/9/10是控制标识位。
CF(bit0)------进位标识
PF(bit2)------奇偶标识
AF(bit4)------辅助进位标识
ZF(bit6)------零标识
SF(bit7)------符号标识
OF(bit11)------溢出标识
TF(bit8)------陷阱标识
IF(bit9)------中断标识
DF(bit10)------方向标识
64bit模式下,该寄存器被扩展为64位:rflags,但32位保留未被使用,低32位含义不变。
1.4 指令寄存器EIP
EIP------标识当前进程将要执行指令位置.
在64位模式下扩展为RIP64位指令寄存器.
1.5 控制寄存器
cr0,cr2,cr3,cr4
1.6 系统表指针寄存器
idtr------中断描述符表信息
gdtr------全局描述符表信息
ldyr------局部描述符表信息
1.7 任务寄存器
保存任务的状态信息tss
1.8 调试寄存器
dr0-dr7 控制和允许监视进程的调试操作
1.9 x87 FPU寄存器
1.10 MMX寄存器
1.11 XMM寄存器
(略)
IA-32构架提供了16个基本寄存器,这16个基本寄存器可以归纳为如下几类:
通用寄存器;
段寄存器;
状态和控制寄存器;
指令寄存器;
1.1 通用寄存器
32位通用寄存器有八个,主要用作逻辑运算/地址运算/内存指针,具体如下:
eax------累加和结果寄存器
ebx------数据指针寄存器
ecx------循环计数器
edx------i/o指针
esi------源地址寄存器
edi------目的地址寄存器
esp------堆栈指针
ebp------栈指针寄存器
32位通用寄存器有八个:eax/ebx/ecx/edx/esi/edi/esp/ebp.
这八个寄存器低16位分别有别名:ax/bx/cx/dx/si/di/sp/bp.
其中ax/bx/cx/dx的高八位有别名ah/bh/ch/dh,低八位有别名al/bl/cl/dl.
64-bit模式下寄存器扩展为rax/rbx/rcx/rdx/rsi/rdi/rsp/rbp/r8/r9/r10/r11/r12/r13/r14/r15.
其中r8/r9/r10/r11/r12/r13/r14/r15是64bit模式新加入的寄存器.
1.2 段寄存器
段寄存器cs/ds/es/fs/gs/ss,保存16位的段选择子,一个段选择子制定一个段在内存的指针,以便在内存访问段,访问方式与内存模式有关.
CS(Code Segment):代码段寄存器
DS(Data Segment),ES,FS,GS:数据段寄存器
SS(Stack Segment):堆栈段寄存器
ES(Extra Segment):附加段寄存器。
1.3 状态和控制寄存器eflags
这个寄存器表示意义非常丰富,程序不恩那个直接操作该寄存器,由操作指令操作。
除去保留位,其他每位都代表一个具体的含义,其中bits 0/2/4/6/7/11 是状态位,标识了某些操作后的状态,8/9/10是控制标识位。
CF(bit0)------进位标识
PF(bit2)------奇偶标识
AF(bit4)------辅助进位标识
ZF(bit6)------零标识
SF(bit7)------符号标识
OF(bit11)------溢出标识
TF(bit8)------陷阱标识
IF(bit9)------中断标识
DF(bit10)------方向标识
64bit模式下,该寄存器被扩展为64位:rflags,但32位保留未被使用,低32位含义不变。
1.4 指令寄存器EIP
EIP------标识当前进程将要执行指令位置.
在64位模式下扩展为RIP64位指令寄存器.
1.5 控制寄存器
cr0,cr2,cr3,cr4
1.6 系统表指针寄存器
idtr------中断描述符表信息
gdtr------全局描述符表信息
ldyr------局部描述符表信息
1.7 任务寄存器
保存任务的状态信息tss
1.8 调试寄存器
dr0-dr7 控制和允许监视进程的调试操作
1.9 x87 FPU寄存器
1.10 MMX寄存器
1.11 XMM寄存器
(略)