C和汇编的相互调用必须遵循ATPCS规范。
1> 参数的传递通过R0-R3传递,如果参数的个数小于4个通过R0-R3传递,如果超过4个通过压栈的方式传递,因此设计函数时,参数尽量不要错过4个。
2> 函数的返回值通过R0返回,如果是8个字节通过R0-R1返回
汇编调用C
[1]. start.s文件
.text
.global _start
_start:
@ 初始化栈指针
ldr sp, =0x40000820
@ 给C函数传递实参值
mov r0, #3
mov r1, #4
mov r2, #5
mov r3, #6
bl add_func @汇编调用C函数
@ 观察:R0寄存器中的值
stop:
b stop
.end
[2]. add.c文件
// 函数默认为一个全局函数
int add_func(int a, int b, int c, int d)
{
return (a+b+c+d);
}
C调用汇编