首先看个实例
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 再是 保存到堆栈里面