C语言和汇编语言相互调用
在C语言中可以内嵌汇编代码,在汇编程序中同样也可以调用C程序。在调用的时候,要注意根据ATPCS规则来完成参数的传递,并配置好C程序传递参数和保存局部变量所依赖的堆栈环境,然后使用BL指令直接跳转即可。
一个C和汇编相互调用的示例代码:
main.c:
#include <stdio.h>
int sum(int a, int b)
{
int result;
result = a + b;
printf("result = %d\n", result);
return result;
}
void sum_asm(void);
int main(void)
{
sum_asm();
return 0;
}
SUM.S:
.text
.global sum_asm
.arm
.type sum_asm, %function
sum_asm:
mov r0, #3
mov r1, #4
bl sum
bx lr
编译运行这两个文件,并运行:
# arm-linux-gnueabi-gcc -o a.out main.c SUM.S
# ./a.out
本教程根据《C语言嵌入式Linux高级编程》视频教程第5期改编。《C语言嵌入式Linux高级编程》是一套专门为嵌入式设计的C语言进阶视频教程,一共9期,每期一个专题,涉及计算机体系结构、ARM汇编与反汇编、程序的编译链接原理、堆栈内存、Linux内核的面向对象编程思想、多任务编程、C语言的模块化编程等专题,具体课程详情可点击淘宝:C语言嵌入式Linux高级编程