32 位CPU 所含有的寄存器有:
4 个数据寄存器(EAX 、EBX 、ECX 和EDX)
2 个变址和指针寄存器(ESI 和 EDI) 2 个指针寄存器(ESP 和EBP)
6 个段寄存器(ES 、CS 、SS 、DS 、FS 和GS)
1 个指令指针寄存器(EIP) 1 个标志寄存器(EFlags)
数据寄存器
数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。
32 位CPU 有4 个32 位的通用寄存器EAX
、EBX
、ECX
和EDX
。对低16 位数据的存取,不会影响高16 位的数据。这些
低16 位寄存 器分别命名为:AX
、BX
、CX
和DX
,它和先前的CPU 中的寄存器相一致。
4 个16 位寄存器又可分割成8 个独立的8 位寄存器(AX :AH-AL
、BX :BH-BL
、CX :CH-CL
、DX :DH-DL
) ,每个寄存器都有自己的名称,可独立存取。
程序员可利用数据寄存器的这种“ 可分可合” 的特性,灵活地处理字/ 字
节的信息。
寄存器AX
和AL
通常称为累加器(Accumulator
) ,用累加器进行的操作可能需要更少时间。
累加器可用于乘、除、输入/ 输出等 操作,它们的使用频率很高;寄存器BX 称为基地址寄存器(Base Register
) 。它可作为存储器指针来使用;寄存器 CX 称为计数寄存器(Count Register
) 。在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL 来指明 移位的位数;寄存器DX 称为数据寄存器(Data Register
) 。在进行乘、除运算时,它可作为默认的操作数参与运算,也可 用于存放I/O
的端口地址。
在16 位CPU 中,AX
、BX
、CX
和DX
不能作为基址和变址寄存器来存放存储单元的地址,但在32 位CPU 中,其32位寄存器 EAX
、EBX
、ECX
和EDX
不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32 位寄存器更具有通用性。
变址寄存器
32 位CPU 有2 个32 位通用寄存器ESI
和EDI
。其低16 位对应先前CPU 中的SI
和DI
,对低16 位数据的存取,不影响高16 位的数据。
寄存器ESI
、EDI
、SI
和DI
称为变址寄存器(Index Register
) ,它们主要用于存放存储单元在段内的偏移量,用它们可实 现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。
变址寄存器不可分割成8 位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。
它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有特定的要求,而且还具有特殊的功能。
指针寄存器
32 位CPU 有2个32位通用寄存器EBP
和ESP
。
其低16 位对应先前CPU 中的SBP
和SP
,对低16 位数据的存取,不影响高16位的数据。
寄存器EBP
、ESP
、BP
和SP
称为指针寄存器(Pointer Register
) ,主要用于存放堆栈内存储单元的偏移量,用它们可实 现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。
指针寄存器不可分割成8
位寄存器。
作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。
它们主要用于访问堆栈内的存储单元,并且规定:
BP 为基指针(Base Pointer) 寄存器,用它可