寄存器是CPU(中央处理器)内的一块高速存储区域,用于临时存储数据和指令
通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果
Intel 80386(i386):英特尔 1985 年发布的第一代 32 位 x86 处理器,奠定现代 32 位 Windows、32 位汇编基础
数据寄存器
1.X86架构中一共有4个32位数据寄存器,用于保存临时数据,它们分别是EAX、EBX、ECX、EDX
2.这4个32位寄存器的通用寄存器名字前面都有一个"E"字母,含义是"Expand"扩展,这是由于在16位的时代,这4个通用寄存器的名字是AX、BX、CX和DX,到了32位后就在它们的名字前面加个"E"来区别是32位还是16位
3.这4个32位的通用寄存器可以当作16位使用,也可以当作8位使用,当作8位使用时,就将AX折开为AH和AL,AH中的"H"代表"high",意思是高位的意思,AL中的"L"代表"low",意思是地位的意思。同理,BX、CX和DX可折开为BH、BL、CH、CL、DH、DL来使用
EAX、EBX、ECX和EDX寄存器的用途
1.EAX寄存器:EAX称为累加器,常用于算数运算、布尔操作、逻辑操作、返回函数结果等
2.EBX寄存器:EBX称为基址寄存器,常用于存放内存地址
3.ECX寄存器:ECX称为计数寄存器,常用于存放循环语句的循环次数,字符串操作中也常用
4.EDX寄存器:称为数据寄存器,常常和EAX一起使用
注意:上面所述的4个通用寄存器的专门用途不是一成不变的,编译器在编译程序的时候会根据很多因素,例如编译器、编译条件、操作系统等做出相应的改变,读者要知道着手研究的程序是用什么编译器编译,然后针对具体的编译器参考该编译器的说明
变址寄存器------ESI和EDI寄存器与其用途
1.变址寄存器
顾名思义,变址的含义是内存地址会变动的,也就是说变址寄存器中存放着变动的内存地址
80386架构中有两个变址寄存器,分别是ESI和EDI
2.ESI和EDI寄存器:
ESI:ESI称为源变址寄存器,通常存放要处理的数据的内存地址。
EDI:EDI称为目的变址寄存器,通常存放处理后的数据的内存地址。
ESI和EDI寄存器的用途
ESI和EDI常用来配合使用完成数据的赋值操作,下面是一个ESI和EDI配合使用的例子
Rep movs dword ptr edi,dword ptr esi 简写为rep movsb
上面的指令把ESI所指向的内存地址中的内容复制到EDI所指向的内存中,数据的长度在ECX寄存器中指定
EDI和ESI可以拆分 低16位分别为DI和SI
指针寄存器-EBP和ESP寄存器与其用途
1.指针寄存器
80386的指针寄存器有基址寄存器EBP,堆栈指针寄存器ESP和指令指针寄存器EIP
指令指针寄存器EIP总是指向下一条要执行的指令的地址,一般情况下无需修改EIP
2.EBP和ESP寄存器
EBP:EBP称为基址寄存器,可作为通用寄存器用于存放操作数,常用来代替堆栈指针访问堆栈中的数据。
寄存器BP称为基址指针寄存器(Base Pointer)
ESP:ESP称为堆栈指针寄存器,不可作为通用寄存器使用,ESP存放当前堆栈栈顶的地址,一般情况下,ESP和EBP联合使用来访问函数中的参数和局部变量
寄存器SP称为堆栈指针寄存器(Stack Pointer)
ESP和EBP可以拆分,低16位分别为SP和BP
EBP和ESP寄存器的用途:
EBP和ESP常配合使用完成堆栈的访问
Push ebp 保存ebp的值
Mov ebp,esp
Mov esp,ebp
Pop ebp 恢复ebp的值
段寄存器
ECS, 代码段寄存器
EDS, 数据段寄存器
ESS, 堆栈段寄存器
EES, 附加段寄存器
EFS, 附加段寄存器
EGS 附加段寄存器
