汇编第2课(上):通用寄存器

通用寄存器

类型64位32位16位8位编号(二进制)编号(十进制)
累加寄存器RAXEAXAXAL0000
计数寄存器RCXECXCXCL0011
数据寄存器RDXEDXDXDL0102
基址寄存器RBXEBXBXBL0113
堆栈顶指针RSPESPSPAH1004
堆栈基指针RBPEBPBPCH1015
变址寄存器RSIESISIDH1106
指令寄存器RDIEDIDIBH1117

基础理论:

一、在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和AL
  • BX可分为:BH和BL
  • CX可分为:CH和CL
  • DX可分为: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个通用寄存器的专门用途不是一成不变的,编译器在编译程序的时候会根据很多因素,例如编译器、编译条件、操作系统等做出相应的改变,首先得知道是用什么编译器编译,然后针对具体的编译器,参考该编译器的说明。