c代码:
int compare_data(int a, int b)
{
return (a >= b) ? a : b;
}
汇编代码:调用compare_data函数,
.section .text
.globl data_func
data_func:
stp x29, x30, [sp,-16]!
mov x0, #3
mov x1, #7
bl compare_data
mov x1, x0
mov x0, #0
ldp x29, x30, [sp], 16
ret
结果如下:
1.函数入参为x0,x1寄存器,即 a = 3, b = 7
2.函数返回值保存在x0寄存器,由于发生了函数跳转,函数返回地址x30也发生了变化,用于记录退出c代码后返回正确的地址继续执行汇编代码:
3.退出汇编代码前,需要恢复原始x30寄存器的值: