09-1-ARM64汇编之函数分类 1. 函数的分类2. 叶子函数如何开辟栈空间?3. 非叶子函数如何开辟栈空间? 1. 函数的分类 叶子函数 : 不做任何调用的函数非叶子函数 : 内部有调用其他函数 2. 叶子函数如何开辟栈空间? 代码 void haha() { int a = 2; int b = 3; } 汇编代码 _haha: sub sp, sp, #16 ; =16 orr w8, wzr, #0x2 str w8, [sp, #12] orr w8, wzr, #0x3 str w8, [sp, #8] add sp, sp, #16 ; =16 ret 代码实现过程 3. 非叶子函数如何开辟栈空间? 代码 void haha() { int a = 2; int b = 3; } void hehe() { int c = 4; int d = 5; haha(); } 汇编代码 _hehe: sub sp, sp, #32 ; sp = sp - 32; stp x29, x30, [sp, #16] ; x29, x30 依次存储到 [sp + 16] add x29, sp, #16 ; x29 = sp + 16 orr w8, wzr, #0x4 stur w8, [x29, #-4] mov w8, #5 str w8, [sp, #8] bl _haha ldp x29, x30, [sp, #16] ; add sp, sp, #32 ; =32 ret 堆栈平衡的过程 其中fp可能在别的地方用, 存储起来以后备用lr存储着函数的返回地址