下述C语言程序包含了一个简单的add()函数,该函数接受两个整型参数,计算并返回两者的和。
main()函数调用执行了add()函数来计算3+2的和,并将计算结果打印出来。
#include <stdio.h>
int add(int a, int b){
int t = a + b;
return t;
}
int main(){
int x = 3;
x = add(x,2);
printf("%d",x);
return 1;
}
为了从机器指令层面理解上述函数调用过程中的传参、跳转、返回等行为,我们在浏览器中访问了下述网站:
在粘贴相关代码并选择ARM64 gcc 9.3选项后,我们得到下述汇编语言指令序列:
add(int, int):
sub sp, sp, #32
str w0, [sp, 12]
str w1, [sp, 8]
ldr w1, [sp, 12]
ldr w0, [sp, 8]
add w0, w1, w0
str w0, [sp, 28]
ldr w0, [sp, 28]
add sp, sp, 32
ret
.LC0:
.string "%d"
main:
stp x29, x30, [sp, -32]!
m