- 基于 x86 架构 的处理器所使用的汇编指令一般有两种格式.
• Intel 汇编
○ DOS(8086处理器), Windows
○ Windows 派系 -> VC 编译器
• AT&T汇编
○ Linux, Unix, Mac OS, iOS(模拟器)
○ Unix派系 -> GCC编译器- 基于ARM 架构 的处理器所使用的汇编指令一般有一种格式, 这种处理器常用语嵌入式设备, 移动设备, 以高性能, 低能耗见长
• ARM 汇编, iOS 真机.
- 基于ARM 架构 的处理器所使用的汇编指令一般有一种格式, 这种处理器常用语嵌入式设备, 移动设备, 以高性能, 低能耗见长
64位 AT&T汇编的寄存器
1. 有16个常用的64位寄存器
• %rax, %rbx, %rcx , %rdx, %rsi, %rdi, %rbp, %rsp (和 8086汇编类似 )
• %r8, %r9, %r10, %r11, %r12, %r13, %r14, %r15
2. 寄存器的具体用途
• %rax 作为函数返回值使用.
• %rsp 指向栈顶.
• %rdi, %rsi, %rdx, %rcx, %r8, %r9, %r10等寄存器用于存放函数参数.
64位, 32位, 16位, 8位 寄存器的显示.
栈帧
函数的调用流程(内存)
• 1.push 参数
• 2.push 函数的返回地址
• 3.push bp (保留bp之前的值,方便以后恢复)
• 4.mov bp, sp (保留sp之前的值,方便以后恢复)
• 5.sub sp,空间大小 (分配空间给局部变量)
• 6.保护可能要用到的寄存器
• 7.使用CC(int 3)填充局部变量的空间
• 8.————执行业务逻辑————
• 9.恢复寄存器之前的值
• 10.mov sp, bp (恢复sp之前的值)
• 11.pop bp (恢复bp之前的值)
• 12.ret (将函数的返回地址出栈,执行下一条指令)
• 13.恢复栈平衡 (add sp,参数所占的空间)