首先看个实例
main.c 文件内容如下:
int myAddadd(int a, int b ,int c ,int d ,int e, int f ,int g )
{
int temp=0;
int sum=10;
sum=a+b+c+d;
sum=sum+e+f;
return sum;
}
int main()
{
myAddadd(1,2,3,4,5,6,7);
return 0;
}
arm-eabi-gcc-4.4.3 -S main.c
编译下,不要汇编,得到如下结果,只列出部分:
output:
add fp, sp, #4
sub sp, sp, #16
mov r3, #5
str r3, [sp, #0]
mov r3, #6
str r3, [sp, #4]
mov r3, #7
str r3, [sp, #8]
mov r0, #1
mov r1, #2
mov r2, #3
mov r3, #4
bl myAddadd
通过汇编,可以得出以下结论:
先右后左, 先R0/R1/R3/R4 再是 保存到堆栈里面