文章目录
- 一、C语言嵌入汇编语言
- 二、汇编语言嵌入c语言
- 三、总结
一、C语言嵌入汇编语言
- C语言直观,易于我们理解,汇编语言效率高,计算机读取速度快,在C里面嵌入汇编是很好的选择。在之前已经讲解了如何基于MDK创建纯汇编语言的STM32工程,现在我们加入c语言实现混合编程。
- 首先新建一个项目,然后设置好仿真调试
基于MDK创建C与汇编语言混合编程一、C语言嵌入汇编语言二、汇编语言嵌入c语言三、总结 - 添加新项目
基于MDK创建C与汇编语言混合编程一、C语言嵌入汇编语言二、汇编语言嵌入c语言三、总结 - 新建一个c语言文件main.c和一个汇编语言文件func.s,
基于MDK创建C与汇编语言混合编程一、C语言嵌入汇编语言二、汇编语言嵌入c语言三、总结 -
写入代码
main.c:
#include<stdio.h>
extern void Init_1();
int main(){
Init_1();
return 0;
}
func.s:
AREA My_Function,CODE,READONLY ;
EXPORT Init_1
Init_1
MOV R1,#0
MOV R2,#0
LOOP
CMP R1,#10
BHS LOOP_END
ADD R2,#1
ADD R1,#1
B LOOP
LOOP_END
NOP
END
- 在汇编函数那一行前设置断点,即可看到c语言调用汇编函数,如图:
基于MDK创建C与汇编语言混合编程一、C语言嵌入汇编语言二、汇编语言嵌入c语言三、总结 -
以上我们已经实现了c语言嵌入汇编无参无返回值混合编程,现在我们试试有参有返回值的,将代码修改如下:
main.c:
#include<stdio.h>
extern int Init_1(int);
int main(){
int result=Init_1(10);
return result;
}
func.s:
AREA My_Function,CODE,READONLY
EXPORT Init_1
Init_1
ADD R0,R0,#100
BX LR ;
END
当汇编函数运行完之后,r0的值与我们所设想的一样为110,如下图:
二、汇编语言嵌入c语言
- main3.s:
AREA main,CODE,READONLY
import addf
ENTRY
EXPORT __main
__main
mov r0,#10 ;给两个参数赋值
mov r1,#12
bl addf ;调用函数
end
fun3.c:
#include<stdio.h>
int addf(int a,int b){
int result=a+b;
return result;
}
- 经过仿真调试,可以看到R0寄存器的与推出的值一样,为22
基于MDK创建C与汇编语言混合编程一、C语言嵌入汇编语言二、汇编语言嵌入c语言三、总结
三、总结
用keil5来试验c语言调用汇编语言和用汇编语言来调用c语言的过程都是一样的,无非就是调用的主体不同,不过汇编语言还是不太熟悉,需要进一步熟悉。
参考文献
STM32的C与汇编语言的混合编程