一、通用寄存器

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位的描述符寄存器,与段寄存器一起来完成实际的物理地址转换,具体过程后文再表。描述符寄存器实际上是段寄存器的隐藏部分,具体可用下图来描述:

如何构造esp包 esp内部结构_如何构造esp包

在地址转换的过程中,描述符寄存器(隐藏部分)用来存放描述符表项的。段寄存器(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是监督协处理器位。

说明:

  1. 系统可以是用LMSW和SMSW指令取出和存入机器状态字;MOV指令可以对CR0进行读写操作;
  2. CR1保留;
  3. CR2包含一个32位的线性地址,指向发生最后一次页故障的地址;
  4. 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进一步说明。