4.2.3 IA-32 CPU 寄存器组织

4.2.3 IA-32 CPU 寄存器组织

IA-32指令中用到的寄存器主要分为定点寄存器组、浮点寄存器栈和多媒体扩展寄存器组,下面仅对定点寄存器组做简要介绍。

图4.5给出了定点寄存器组的结构。

IA-32中的定点寄存器中共有8个通用寄存器(General-Purpose Register,GPR)、2个专用寄存器和6个段寄存器。定点通用寄存器是指没有专门用途的可以存放各类定点操作数的寄存器。

8个通用寄存器的功能与8086CPU 中的通用寄存器功能一致。它们可以作为32位通用寄存器(EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP)使用,也可以作为16位通用寄存器(AX、BX、CX、DX、SI、DI、SP、BP)使用,或者作为一个8位通用寄存器(AX、BX、CX、DX、SI、DI、SP、BP)使用。

两个专用寄存器分别是指令指针寄存器EIP和标志寄存器EFLAGES。EIP从16位的IP扩展而来,是用来存放即将执行指令的地址的寄存器。EFLAGS从16位的FLAGS扩展而来。

图4.5 IA-32的定点寄存器组

EFLAGS寄存器主要用于记录机器的状态和控制信息,如图4.6所示。

图4.6 状态标志寄存器EFLAGS

EFLAGS寄存器的第0~11位中的9个标志位是从最早的8086CPU 延续下来的,分为6个条件标志和3个控制标志。第12~31位中的其他状态或控制信息是从80286以后逐步添加的,包括用于表示当前程序的I/O 特权级(IOPL)、当前任务是否是嵌套任务(NT)、当前处理器是处于虚拟8086方式(VM)等一些状态或控制信息。

IA-32的段寄存器在8086上增加了2个,共有6个段寄存器,都为16位。与8086生成操作数的物理地址不同,CPU 根据段寄存器的内容与寻址方式确定有效地址后,再结合用户不可见的内部寄存器,共同生成操作数所在的存储地址,具体见4.2.5节中IA-32的寻址方式。