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
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
相关文章推荐
- ARM9 MINI 2440 裸机实验之----C语言调用汇编函数
- arm汇编程序调用C函数之参数传递
- 汇编调用c函数为什么要设置栈
- 汇编调用c函数为什么要设置栈
- 王爽 汇编 实验16 增加键盘中断调用int 7ch中断例程
- ARM汇编与C语言混合编程之汇编调用C函数
- 在汇编代码中调用C函数
- 汇编调用C函数之前要设置好栈??
- 实验--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用(杨光)
- 实验--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用(李鹏举)
- 汇编调用c函数为什么要设置栈
- 在keil中,汇编中调用c函数
- 汇编和c函数交叉混合调用
- 在DSP 线性汇编中可否调用C函数,如何调用
- 汇编调用C函数--利用堆栈传递参数
- 在汇编代码中调用C函数
- 汇编调用c函数为什么要设置栈
- 汇编调用c函数为什么要设置栈
- 汇编调用c函数时 堆栈的变化的详细分析