一、数据寄存器
1.1 EAX: Acculturator 累加寄存器(32位), AX 算术运算主要寄存器(高16位),可作为函数返回值;
1.2 EBX:base 基址寄存器,存放指针,内存寻址时存放的基址,寄存器间接寻址方式;
1.3 ECX:Count 计数寄存器,可做thiscal 中this指针存放的位置,可做Rep前缀指令和Loop指令的内定寄存器,可做fastcal的第一个参;
1.4 EDX:资料寄存器,可用来存放整除产生的余数,可做fastcal 的第二个参;
1.5 EDI:Destiny 目标索引寄存器,字符串操作中作为目标串地址;
1.6 ESI:source 来源索引寄存器,可做this指针,可做运算寄存器;
1.7 EBP:基地址,栈底指针,也被称为框架指针,【esp,ebp】之间存放当前函数的局部变量;
EBP上面是当前函数的临时变量,下面是返回地址和参数和上层函数的局部变量;
1.8 ESP:extended base pointer 堆栈指针,栈顶指针,在函数内部不变,可寄存器相对寻址。
1.9 EIP: 将要运行的代码位置;
寄存器 | 编号(二进制) | 编号(十进制) | ||||
32位 | 16位 | 8位 | ||||
EAX | AX | AL | 000 | 0 | ||
ECX | CX | CL | 001 | 1 | ||
EDX | DX | DL | 010 | 2 | ||
EBX | BX | BL | 011 | 3 | ||
ESP | SP | AH | 100 | 4 | ||
EBP | BP | CH | 101 | 5 | ||
ESI | SI | DH | 110 | 6 | ||
EDI | DI | BH | 111 | 7 | ||
备注: 之所以 31~0 的顺序,是因为是小端。 | ||||||
31 16 | 15 0 | 15 0 | 15 8 | 7 0 | ||
EAX | AX | AH | AL | |||
ECX | CX | CH | CL | |||
EDX | DX | DH | DL | |||
EBX | BX | BH | BL | |||
ESP | SP | |||||
EBP | BP | |||||
ESI | SI | |||||
EDI | DI |
二、段寄存器
CS:code segment 代码段的段值 , 加EIP 就是当前地址;
DS:data segment 数据段;
SS: stack segment 堆栈段: + SP
ES: Extra segment 附加段寄存器 : FS,GS
当程序执行时,要决定CS、DS、SS在内存中哪里,通常DS时固定的,而根据需要改CS;
三、状态值寄存器
EFLAGES:于操作系统有关,一组状态值,系统标志 及控制位,中断或者异常的时候,EFLAGES的值被保存于TSS(Task State Segment,任务状态段);
ZF:结果为0,置灰为1,否则清0;
CF:(CarryFlag) 进位标志,溢出,最高有效位溢出(如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。);使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。
OF: 溢出标志OF(OverflowFlag)(反映有符号数加减运算所得结果是否溢出。)
如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0。
进位与溢出的区别:进位标志表示无符号数运算结果是否超出范围;溢出标志表示有符号数运算结果是否超出范围.
SF:有符号整型最高位,就是0表示正,1表示负;(反映运算结果的符号位,它与运算结果的最高位相同。)
PF:奇偶标志PF(ParityFlag),反映运算结果中“1”的个数的奇偶性(如果“1”的个数为偶数,则PF的值为1,否则其值为0。)
AF:辅助进位标志AF(AuxiliaryCarryFlag)
在发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0:
(1)、在字操作时,发生低字节向高字节进位或借位时;
(2)、在字节操作时,发生低4位向高4位进位或借位时
IF:中断允许标志IF(Interrupt-enableFlag)
DF:方向标志DF(DirectionFlag)
TF: 追踪标志TF(TrapFlag),当追踪标志TF被置为1时,CPU进入单步执行方式,即每执行一条指令,产生一个单步中断请求.这种方式主要用于程序的调试。
上面为一些大概的总结, 具体看同分类下的转载文章;