32位寄存器

一.数据寄存器

    32位CPU下有4个数据寄存器,分别是EAX,EBX,ECX,EDX。其中E的是意思为扩展(Extended)。

        EAX(Accumulator Register):常称为累加器,加法、乘除指令默认使用EAX,常用于存放各种计算结果。

        EBX(Base Register):称为基地址寄存器,用于内存寻址时存放基地址,也可用于存储器指针。

        ECX(Count Register):CPU默认使用ECX为循环计数器,用于控制循环(Loop)次数。

        EDX(Date Register):在进行乘除运算时,它可以作为默认的操作数参与运算,同时被用于保存乘法形成的部分结果或除法之前部分被除数。整数除法的余数也总是存放在EDX中。

         在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,但在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据、保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。

二.变址寄存器

       ESI(Source Index):称为源变址寄存器,通常用于存放要处理的数据的内存地址。同时当进行例如循环一个数组求和时,ESI会充当指针用于遍历数组。

       EDI(Destination Index):称为目的变址寄存器,通常用于存放处理后的数据的内存地址。

三.指针寄存器

        EBP(Base Pointer && Frame Pointer):EBP用于引用堆栈中的函数参数和局部变量,指向当前活动记录的底部,通过EBP使得访问函数的参数变得很容易。任何函数调用后都需要保护调用者的帧指针,以便调用完成后可以恢复调用者的帧指针。

        ESP(Stack Pointer):ESP用于堆栈指针,它指向当前堆栈的栈顶位置。

四.段寄存器

       CS(Code Segment Register)代码段寄存器:其值为代码段的段值。

  DS(Data Segment Register)数据段寄存器:其值为数据段的段值。

       SS(Stack Segment Register)堆栈段寄存器:其值为堆栈段的段值。

  ES(Extra Segment Register)附加段寄存器:其值为附加数据段的段值。

  FS(Extra Segment Register)附加段寄存器:其值为附加数据段的段值。

  GS(Extra Segment Register)附加段寄存器:其值为附加数据段的段值。

五.指令寄存器

        EIP(Instruction Pointer)EIP中包含下一条将要执行指令的地址,某些机器指令(如jmp)能够控制EIP,使得程序分支转到一个新位置。

六.标志寄存器

  1.进位标志位(Carry Flag && CF):当无符号数的计算结果超出其范围时,CF被置为1, 否则CF被置为0。

  2.溢出标志位(Overflow Flag && OV):当有符号数的计算结果超出其范围时,OV被置为1,否则OV被置为0。

  3.符号标志位(Sign Flag && SF):算术或逻辑操作产生负结果时,SF被置为1,否则SF被置为0。

  4.零标志位(Zero Flag && ZF):算数或逻辑结果产生的结果为零时,ZF被置为1,否则ZF被置为0。

  5.辅助进位标志位(Auxiliary Carry Flag && AC):运算时若最低的四位产生了进位,那么AC被置为1,否则AC被置为0。

  6.奇偶校验标志位(Parity Flag):目标操作数最低有效字节中的1的个数为偶数时,PF被置为1,否则PF被置为0。

你可能感兴趣的:(32位寄存器)