知识点:
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