- 一、C语言嵌入汇编语言
- 二、汇编语言嵌入c语言
- 三、总结
- C语言直观,易于我们理解,汇编语言效率高,计算机读取速度快,在C里面嵌入汇编是很好的选择。在之前已经讲解了如何基于MDK创建纯汇编语言的STM32工程,现在我们加入c语言实现混合编程。
- 首先新建一个项目,然后设置好仿真调试
- 添加新项目
- 新建一个c语言文件main.c和一个汇编语言文件func.s,
- 写入代码
main.c:
#includeextern 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语言调用汇编函数,如图:
- 以上我们已经实现了c语言嵌入汇编无参无返回值混合编程,现在我们试试有参有返回值的,将代码修改如下:
main.c:
#includeextern 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,如下图:
- main3.s:
AREA main,CODE,READonLY import addf ENTRY EXPORT __main __main mov r0,#10 ;给两个参数赋值 mov r1,#12 bl addf ;调用函数 end
fun3.c:
#includeint addf(int a,int b){ int result=a+b; return result; }
- 经过仿真调试,可以看到R0寄存器的与推出的值一样,为22
用keil5来试验c语言调用汇编语言和用汇编语言来调用c语言的过程都是一样的,无非就是调用的主体不同,不过汇编语言还是不太熟悉,需要进一步熟悉。
参考文献
STM32的C与汇编语言的混合编程



