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高级编程