一.数据寄存器
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。