一、在16位CPU的时代,16位的通用寄存器分别命名为:AX、BX、CX、DX;到了32位CPU时代后,就在它们的名字前面加个“E”来区别是32位还是16位。
二、32位CPU有4个32位的通用寄存器EAX、EBX、ECX、EDX,用于保存临时数据。
三、“E”是“Expand”的首字母,代表含义是“扩展”。
四、这4个32位的通用寄存器可以当作16位使用,也可以当作8位使用。当作8位使用时,就将AX折开为AH和AL,AH中的“H”代表“high”,意思是高位的意思,AL中的“L”代表“low”,意思是低位的意思。同理,BX、CX和DX可折开为BH、BL、CH、CL、DH、DL来使用。如下图所示:
总的来说,4个16位寄存器可分割成8个独立的8位寄存器:
AX可分为:AH和ALBX可分为:BH和BLCX可分为:CH和CLDX可分为:DH和DL五、每个寄存器都有自己的名称,可独立存取。程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。
六、一些寄存器是别的寄存器的一部分,例如:如果EAX保存了值12782345,其他寄存器的值(红色部分)如下图:
EAX
12
78
23
45
AX
12
78
23
45
AH
12
78
23
45
AL
12
78
23
45
七、通用寄存器概念:
寄存器AX称为累加器(Accumulator),常用于算数运算(加减乘除)、布尔操作、逻辑操作、输入/输出、返回函数结果等,累加器的使用频率很高;
寄存器BX称为基地址寄存器(Base Register),常用于存档内存地址,它可作为存储器指针来使用。
寄存器CX称为计数寄存器(Count Register),常用于存放循环语句的循环次数,字符串操作中也常用。在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数。
寄存器DX称为数据寄存器(Data Register),常常和EAX一起使用,在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。
注意:上面所述的4个通用寄存器的专门用途不是一成不变的,编译器在编译程序的时候会根据很多因素,例如编译器、编译条件、操作系统等做出相应的改变,首先得知道是用什么编译器编译,然后针对具体的编译器,参考该编译器的说明。