准备
- 在
main函数中实现以上代码 - 加上断点,运行
查看汇编代码
- 可以使用
register read来读取寄存器 w表示32位的寄存器,x表示64位的寄存器- 由于使用的是
int类型,只有4个字节最多占用32位,所以使用w寄存器
- 打印
w9可以看到就是10,mov表示将#0xa赋值到w9
stur是将寄存器w9的内存取出来10,存到x29 - 0x14这块栈地址上,其实就a = 10的赋值过程,x29 - 0x14 = &amov w9, #0x14让后再将0x14也就是20赋值给w9
str w9 [sp, #0x18], 然后再将w9取出20放到栈地址+0x18上,sp+0x18 = &b,也就是b的赋值ldur w0, [x29, -#0x14], 上一已经得到[x29, -#0x14]其实在栈上a的地址,这一步就是把10取出来 存到w0寄存器中ldr w1, [sp, #0x18],[sp, #0x18栈上b,把20取出存到w1中ldur, ldr都是将内存中的价值到寄存中,只不过用于-一个用于+stur, str将 寄存器的放找内存中,一个用于-一个用于+str w8 [sp, #0x10], 将w8中的存到sp+0x10地址中, 上边可以看到w8 = 0x0bl sum main.m13跳转到函数sum
打印所以的寄存器
可以看出 返回值放在了
x0中存储
打开编译器优化
在看一下汇编代码
- 可以看出中间省了很多的步骤,直接可以从
w8中打印出结果 - 所有在打
release编译器会帮我默认打开fastest and smallest,这样更能节省性能