寄存器在汇编和反汇编中都是必需品,我把各类寄存器及其作用总结了一下,希望大家多多交流
4个数据寄存器(EAX、EBX、ECX和EDX)
2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)
6个段寄存器(ES、CS、SS、DS、FS和GS)
1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)
EBP :(Extended Base Pointer)基址指针寄存器,存放栈底指针
ESP :(Extended Stack Pointer)栈指针寄存器,存放栈顶指针
EAX :(Extended Accumulate )累加寄存器,用做加减乘除运算
EBX :(Extended Base)基址寄存器,可以用来存储指针
ECX :(Extended Count)计数寄存器,用在循环中控制循环的次数
EDX :(Extended Data)数据寄存器,在进行乘、除运算时,它可作为默认的操作数参与运算,通常用来保存余数。也 可用于存放I/O的端口地址
ESI:(Extended Source Index)源索引寄存器,可以存放任何数据,但是习惯把它存放指针。
EDI:(Extended Destination Index)目的索引寄存器,但是ESI和EDI虽然他俩经常配合,但是之间的区别还是比较大的。在字符串处理指令中,ESI和DS结合,DS:ESI构成全指针,在穿处理指令方面,ESI负责只读,EDI负责只写。关于为啥只能ESI和DS结合形参全指针,这是硬件构造决定的,没有选择性。ES:EDI,同样构成全指针。
EIP:(Extended Instruction Pointer)指令指针寄存器,要存放下一条执行指令的地址
EFL:(Extended Flag)标志寄存器,用来运算结果标志(进位,溢出等),状态控制标志(跟踪,中断允许等)。
CS——代码段寄存器(Code Segment Register),其值为代码段的段值;
DS——数据段寄存器(Data Segment Register),其值为数据段的段值;
ES——附加段寄存器(Extra Segment Register),其值为附加数据段的段值;
SS——堆栈段寄存器(Stack Segment Register),其值为堆栈段的段值;
FS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值;
GS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值。