x86架构寄存器介绍
x86寄存器分类:
类型 | 寄存器 |
---|---|
通用寄存器 | EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP |
标志寄存器 | EFLAGS |
段寄存器 | CS、DS、ES、FS、GS、SS |
控制寄存器 | CR0、CR1、CR2、CR3、CR4 |
调试寄存器 | DR0、DR1、DR2、DR3、DR4、DR5、DR6、DR7 |
系统地址寄存器 | GDTR、IDTR、LDTR、TR |
其它寄存器:EIP、TSC等
通用寄存器
寄存器 | 说明 |
---|---|
EAX | 累加器(Accumulator),低16为是AX,而AX又分为高8位AH和低8位AL(其余的通用寄存器类似)。EAX是很多加法乘法的缺省寄存器,存放函数的返回值。AX寄存器是算术运算的主要寄存器。 |
EBX | 基地址寄存器(Base Register),主要用于在内存寻址时存放基地址。 |
ECX | 计数寄存器(Count Register),在循环操作时用来控制循环次数。 |
EDX | 数据寄存器(Data Register),在进行乘、除运算时,作为默认的操作数参与运算,而且总是被用来放整数除法产生的余数,也可用于存放I/O的端口地址。 |
ESI/EDI | 源/目标索引寄存器(Source/Destination Index Register),主要用于存放存储单元在段内的偏移量。 |
EBP/ESP | 基址指针寄存器(Base Pointer Register)/堆栈指针寄存器(Stack Pointer Register),主要用于存放堆栈内存储单元的偏移量,用它们可以实现多种存储器的操作数的寻址方式。 |
状态寄存器
EFLAGS状态寄存器包含了一系列的标志位用于提供程序的状态以及进行相应的控制。
标志位 | 位置 | 说明 |
---|---|---|
CF | 0 | Carry flag:算术操作产生的结果在最高有效位发生进位时置为1,反之清零,指示无符号整形运算的溢出状态。 |
PF | 2 | Parity flag:算术操作产生的结果在最低有效字节包含偶数个1则置为1,反之清零。 |
AF | 4 | Adjust flag:算术操作的结果在第3位发生进位或借位则置为1,否则清零。 |
ZF | 6 | Zero flag:算术操作的结果为0则置为1,反之清零。 |
SF | 7 | Sign flag:算术操作结果作为有符号数的最高有效位,即正数置为0,负数置为1。 |
OF | 11 | Overflow flag:带符号整形运算溢出时置为1,反之清零,指示带符号整形运算溢出状态。 |
DF | 10 | Direction flag:设置串指令的处理方向,置为1则从高地址向低地址方向处理字符串,置为0则反之。 |
TF | 8 | Trap flag:置为1则允许单步调试。 |
IF | 9 | Interrupt enable flag:置为1允许响应中断,反之禁止响应中断。 |
IOPL | 12-13 | IO privilege level field:指示当前运行任务的IO特权级,正在运行任务的当前特权级必须小于或等于IO特权级才能访问IO地址空间。 |
NT | 14 | Nested task flag:若当前任务与前一个执行任务相关则置为1,反之清零。 |
RF | 16 | Resume flag:控制处理器对调试异常的响应。 |
VM | 17 | Virtual-8086 mode flag:置为1则允许虚拟8086模式,清零则返回保护模式。 |
AC | 18 | Alignment check flag:该标志与CR0寄存器中AM位置同时置为1时允许内存引用的对齐检查,两个标志不同时置1则禁用内存对齐检查。 |
VIF | 19 | Virtual interrupt flag:虚拟模式扩展标志位 |
VIP | 20 | Vritual interrupt pending flag:置为1指示一个中断正在被挂起。 |
ID | 21 | Identification flag:指示处理器对CPUID指令的支持。 |
段寄存器
段寄存器 | 描述 |
---|---|
CS | 保存代码段的段选择子,与EIP寄存器(存放要执行的下一条指令在代码段中的偏移量)一起构成代码的逻辑地址。CS寄存器不能由应用程序显式加载,而应该有操作系统以及处理器内部加载以改变程序的执行流。 |
DS | 保存当前程序模块的数据段的段选择子 |
ES | 保存当前程序模块辅助数据段的段选择子 |
FS | 保存由程序动态创建的数据段的段选择子 |
GS | 保存另一个程序共享出来的数据段的段选择子 |
SS | 保存栈段的段选择子。应用程序可以显式加载SS寄存器,以便创建多个栈段。 |
控制寄存器
CR0:
标志位 | 位置 | 描述 |
---|---|---|
PE | 0 | Protection Enable:置为1时进入保护模式,清零时进入实模式。若PE和PG标志位同时置1,则开启分页模式,若仅PE标志位置1,则仅开启分段模式。 |
PG | 31 | Paging:置为1时开启分页模式,清零时禁用分页模式。开启分页模式之前必须先将PE标志位置为1。 |
CR1: 未定义的控制寄存器
CR2: 页故障线性地址寄存器,保存最后一次出现页故障的喜爱线性地址。
CR3: 保存页目录物理内存基地址。
系统地址寄存器
寄存器 | 描述 |
---|---|
GDTR | 全局描述符表寄存器:存放全局描述符表GDT的入口地址 |
LDTR | 局部描述符表寄存器:存放局部描述符表LDT的入口地址 |
IDTR | 中断描述符表寄存器:存放中断描述符表IDT的入口地址 |
TR | 任务状态段寄存器:存放当前任务的任务状态段的段选择子 |
其它寄存器
略