知识点:

1: 如果C函数的参数小于4个, 则 参数按顺序初始化保存在 R0-R3

2:  如果C函数的参数大于4个, 则 参数按顺序初始化保存在 R0-R3, 其它参数保存在当前SP已初始化的栈里

3:返回来的结果保存在R0

*********************************************************

C文件:

int function(int a,int b,int c, int d, int e) // total 5 arguments

{

return a+b+c+d+e;

}

*********************************************************

汇编文件:

stack_size equ 0x400
area stack, data, noinit, readwrite,  align = 3 ; declare stack section 

stack_men SPACE   stack_size 
preserve8

area asm_to_c , code, readonly ; declare code section

ENTRY

code32

start

ldr r0,=stack_men 

mov sp, r0

sub sl, sp, #stack_size ; sl = r0 栈底SL 在执行的时候,也是R10

bl call_c_function

b stop

call_c_function

import function

str lr, [sp,#-0x4]!

mov r0, #0x1 ;a

mov r1, #0x2 ;b

mov r2, #0x3 ;c

mov r3, #0x4 ;d

mov r4, #0x5 

str r4, [sp,#-0x4]! ;e 第五个参数放进栈

bl function

nop ; 空语句可以做缓冲中间层作用

add sp, sp, #0x4

ldr pc, [sp], #0x4

stop b stop

END