准备

- 在
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,这样更能节省性能
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
























![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)