函数参数大于4个时多余参数的PUSH过程

发表于:2007-06-08来源:作者:点击数: 标签:
在APTCS中,考虑程序的效率,建议参数尽量少于4个。 测试 了一下4个以上参数的函数调用ARM生成的汇编指令,前四个参数存储到[R0-R3], 剩余参数压栈(R13-SP) /* * FILE:Main.c * DATE:2005-08-08 * AUTHOR:Simon * Test the call pop procedure */ #includ
在APTCS中,考虑程序的效率,建议参数尽量少于4个。测试了一下4个以上参数的函数调用ARM生成的汇编指令,前四个参数存储到[R0-R3], 剩余参数压栈(R13->SP)

/*
 * FILE: Main.c
 * DATE: 2005-08-08
 * AUTHOR: Simon
 * Test the call pop procedure
 */

#include
#include

extern int add(int a, int b, int c, int d, int e, int f, int g);

int main(void)
{
 add(1, 2, 3, 4, 5, 6, 7);
}

     ;FILE: pop.s

     AREA addfunction, CODE, READONLY
 
     EXPORT add

add
     LDR r7, [r13]
 
     MOV pc, lr
     END

 

/**********ARM CODE********************/

main [0xe92d400e] * stmfd    r13!,
000080ac [0xe3a03007]   mov      r3,#7
000080b0 [0xe3a02006]   mov      r2,#6
000080b4 [0xe3a01005]   mov      r1,#5
000080b8 [0xe88d000e]   stmia    r13,


000080bc [0xe3a03004]   mov      r3,#4
000080c0 [0xe3a02003]   mov      r2,#3
000080c4 [0xe3a01002]   mov      r1,#2
000080c8 [0xe3a00001]   mov      r0,#1

000080clearcase/" target="_blank" >cc [0xeb0000b0]   bl       add
000080d0 [0xe3a00000]   mov      r0,#0
000080d4 [0xe8bd800e]   ldmfd    r13!,
_main_redirection [0xe1a0f00e]   mov      pc,r14


原文转自:http://www.ltesting.net