一、通用寄存器
EAX、EBX、ECX、EDX、EBP、ESP、ESI和EDI 8个32位的通用寄存器。
通用寄存器结构
| AH | AL |
| BH | BL |
| CH | CL |
| DH | DL |
| SI | |
| DI | |
| BP | |
| SP |
AH与AL是8位寄存器,构成AX,占16位。EBX(基址寄存器)、ECX(计数寄存器)、EDX(数据寄存器)具有类似的结构。
EBP(基址指示器)、ESP(堆栈指示器)、ESI(源变址寄存器)、EDI(目的变址寄存器)。
二、段寄存器
6个段寄存器(16位)分别是CS(代码段寄存器)、DS(数据段寄存器)、SS(堆栈段寄存器)、ES(扩展段寄存器)、FS和GS。
实地址模式下:逻辑地址表示为ES:BX,那么实际物理地址可表示为Address=ES<<4+BX;
保护模式下:逻辑地址同样表示为ES:BX(段选择符:段内偏移),具体的物理地址计算过程见后面的文章。
三、描述符寄存器
6个64位的描述符寄存器,与段寄存器一起来完成实际的物理地址转换,具体过程后文再表。描述符寄存器实际上是段寄存器的隐藏部分,具体可用下图来描述:
在地址转换的过程中,描述符寄存器(隐藏部分)用来存放描述符表项的。段寄存器(16位可见部分)用来存放段选择字或者叫做选择符。
四、指令指针EIP
32位的指令指针EIP如下图所示:
32位EIP指令指针
| IP |
五、标志寄存器EFLAGS
32位的标志寄存器位结构如下图所示:
EFLAGS寄存器
| VM | RF | | NT | IOPL | OF | DF | IF | TF | SF | ZF | | AF | | PF | | CF |
说明:其中IOPL是IO特权标志位,表示当前任务的特权层;
NT位表示任务嵌套标志;
VM是虚拟保护模式标志;
IF是中断允许标志;
六、控制寄存器
80386中有4个32位的控制寄存器,分别是CR0、CR1、CR2和CR3,结构如下图所示:
控制寄存器
| | TS | EM | MP | PE |
| | ||||
| | ||||
| |
CR0寄存器的低16位叫做机器状态字(MSW),保护允许位(PE)用来使能CPU进入保护模式。
TS是任务切换位、EM是仿真协处理器位、MP是监督协处理器位。
说明:
- 系统可以是用LMSW和SMSW指令取出和存入机器状态字;MOV指令可以对CR0进行读写操作;
- CR1保留;
- CR2包含一个32位的线性地址,指向发生最后一次页故障的地址;
- CR3包含页目录表的物理基地址。
七、系统地址寄存器
80386有4个内存管理寄存器又可称为系统地址寄存器。分别是48位的GDTR 存放全局描述符表的基地址32位和限值16位;48位的IDTR存放中断描述符表的基地址32位和限值16位;LDTR寄存器用来存放局部描述符表的段选择字;TR寄存器用来存放任务状态段表的段选择字。
八、调试寄存器组
80386提供了8个32位的调试寄存器DR0-7,其中DR7用来设置断点,DR6保留断点状态,DR5和DR4保留,DR0-3可以保存4个断点线性地址。
九、测试寄存器组
80386提供了2个32位的测试寄存器,一个TR6是测试控制寄存器,另一个TR7来保留测试状态。
十、任务寄存器
80386提供一个32位的任务寄存器来为多任务系统提供支撑。在后面的文章里会结合任务状态段TSS进一步说明。