汇编——32位通用寄存器

寄存器是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 附加段寄存器