您的位置:首页 > 其它

RM9 mini 实验之裸机汇编调用C函数

2012-12-28 14:49 323 查看
知识点:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  汇编调用C函数