C和汇编的混合编程

本文介绍了C语言和汇编如何相互调用。在应用层逻辑中,C语言通常作为主要编程语言,而汇编用于控制CPU等底层操作。C调用汇编主要通过全局标号作为函数入口,而汇编调用C则将C函数视为标号进行跳转。这种结合使得开发者能灵活地利用两种语言的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C可以实现应用层的逻辑,但无法控制CPU的工作状态,控制CPU的操作就要通过汇编来完成。比如开发板内的启动程序是汇编,但应用层逻辑执行是C。开发板刚上电的时候,一开始是处于SVC模式,准备就绪后会转换成USER模式,这一步是由汇编完成的,这之后就开始执行C代码。

因为C使用起来更加便利,在使用时,还是以C为主,汇编为辅。

1、C 调用汇编

(1) 外部调用

外部调用指的是执行某个 .s文件中的汇编代码。C中只有函数的概念,汇编中最接近函数的,就是标号了,所以C调用汇编,其实就是把汇编中的标号当作函数处理。

汇编代码:

.global FUNC_ASM     @ 需要设为全局,不然C找不到
FUNC_ASM:            @ C调用完汇编以后会自动跳回去
    MOV R1, #1
    MOV R2, #2

C代码:

void myfunc(){
    FUNC_ASM();
}

(2) 内联调用

内联调用就是直接在 .c 文件里写汇编代码(需要按照格式来)

内联调用的格式:

asm(
    "指令1 \n"        // 不要忘记 \n
    "指令2 \n"
);

具体使用: 

void myfunc(){
    asm(
        "MOV R1, #1\n"
        "MOV R2, #2\n"
    );
}

2、汇编调用C

和上面相反,汇编调用C,其实就是把C中的函数当作标号处理。

C代码:

void myfunc(){
    int a = 1;
}

汇编代码:

BL myfunc         @ 跳转到C函数执行完毕以后,会自己跳转到下一条指令的位置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值