汇编基础
- 每一种
CPU
都有自己的机器指令集\汇编指令集,所以汇编语言不具备可移植性; - 因为汇编和
操作系统
平台相关,所以汇编语言没有移植性;
汇编分类:
- 8086汇编(8086处理器是16bit的CPU)
- Win32汇编
- Win64汇编
- ARM汇编(嵌入式、Mac、iOS)
计算机内部模型:
CPU 的组成:
- 寄存器
- pc寄存器(program counter 指令指针寄存器)
- 变址寄存器
- ESI 称为源变址寄存器,通常存放要处理的数据的内存地址
- EDI 称为目的变址寄存器,通常存放处理后的数据的内存地址。
- ESI 和 EDI 常用来配合使用完成数据的赋值操作
- 指针寄存器
- EBP 基址寄存器 常用来代替堆栈指针访问堆栈中的数据
- ESP 堆栈指针寄存器
存放当前堆栈栈顶的地址
- EIP 指令指针寄存器
- 一般情况下,ESP 和 EBP 联合使用来访问函数中的参数和局部变量
- 标志寄存器
- EFLAGS寄存器
- OF(Overflow Flag):溢出标志,溢出时为1,否则置0。
- DF (Direction Flag):方向标志,在串处理指令中控制信息的方向。
- IF (Interrupt Flag) :中断标志
- AF (Auxiliary carry Flag) :辅助进位标志,有进位时置1,否则置0。
- ZF (Zero Flag) :零标志,运算结构为0时ZF位位置1,否则置0。
- SF (Sign Flag):符号标志,结果为负时置1,否则置0。
- CF (Carry Flag): 进位标志,进位时置1,否则置0。
- PF (Parity Flag): 奇偶标志。结果操作数中1的个数为偶数时置1,否则置0。
- EFLAGS寄存器
- 运算器
- 控制器
寻址方式:
- 立即寻址
- 直接寻址
- 寄存器寻址
- 寄存器相对寻址
- 基址加变址寻址
- 相对基址加变址寻址
IA-32(Intel Architecture)
- 英特尔体系架构,英特尔从486开始采用,也叫
X86-32架构
- 有4个32位寄存器,用于保存临时数据,它们分别是EAX、EBX、ECX和EDX (这4个32位寄存器的通用寄存器名字前面都有一个“E”字母,含义是“Expand”扩展,这是由于在16位的时代,这4个通用寄存器的名字是AX、BX、CX和DX,到了32位后就在它们的名字前面加个“E”来区别是32位还是16位。)
- EAX寄存器:EAX称为累加器,常用于算数运算、布尔操作、逻辑操作、返回函数结果等
- EBX寄存器:EBX称为基址寄存器,常用于存档内存地址
- ECX寄存器:ECX称为计数寄存器,常用于存放循环语句的循环次数,字符串操作中也常用
- EDX寄存器:称为数据寄存器,常常和EAX一起使用
- IA-32架构的汇编语言常见有两种格式
- Intel格式
- 指令名称 目标操作数DST,源操作数SRC
- Mov eax,[edx] //将内存地址为EDX的数据放入EAX寄存器
- AT&T格式
- 指令名称 源操作数SRC,目标操作数DST
- Mov (%EDX),%EAX //将内存地址为EDX的数据放入EAX寄存器
- Intel格式
x86 组装指南
- http://www.cs.virginia.edu/~evans/cs216/guides/x86.html
- https://www.felixcloutier.com/x86/
坐标
- 北纬33°27′至33°47′,东经115°53′至116°33′
- 北纬34°9′ 至35°34′,东经107°38′至109°10′
常用指令
- MOV 数值传送指令
- 格式是“MOV DST,SRC” 将源操作数SRC传送到目的操作数DST中
- XCHG 交换指令,实现寄存器间和内存间的数据交换
- 格式是“XCHG DST,SRC”。XCHG指令交换SRC和DST之间的数据
- PUSH 压入堆栈指令
- POP 弹出堆栈指令
gcc -S example.c
int add_a_and_b(int a, int b) {
return a + b;
}
_add_a_and_b:
push %ebx
mov %eax, [%esp+8]
mov %ebx, [%esp+12]
add %eax, %ebx
pop %ebx
ret
参考资料:
- http://www.ruanyifeng.com/blog/2018/01/assembly-language-primer.html
- https://www.jianshu.com/p/47b750455ab5
- https://blog.csdn.net/cg2258911936/article/details/102598631