基于MDK创建C与汇编语言混合编程

文章目录

  • 一、C语言嵌入汇编语言
  • 二、汇编语言嵌入c语言
  • 三、总结

一、C语言嵌入汇编语言

  • C语言直观,易于我们理解,汇编语言效率高,计算机读取速度快,在C里面嵌入汇编是很好的选择。在之前已经讲解了如何基于MDK创建纯汇编语言的STM32工程,现在我们加入c语言实现混合编程。
  • 首先新建一个项目,然后设置好仿真调试
    基于MDK创建C与汇编语言混合编程_第1张图片
  • 添加新项目
    基于MDK创建C与汇编语言混合编程_第2张图片
  • 新建一个c语言文件main.c和一个汇编语言文件func.s,
    基于MDK创建C与汇编语言混合编程_第3张图片
  • 写入代码
    main.c:
#include
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与汇编语言混合编程_第4张图片
  • 以上我们已经实现了c语言嵌入汇编无参无返回值混合编程,现在我们试试有参有返回值的,将代码修改如下:
    main.c:
#include
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,如下图:
基于MDK创建C与汇编语言混合编程_第5张图片

二、汇编语言嵌入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
int addf(int a,int b){
	int result=a+b;
	return result;
}
  • 经过仿真调试,可以看到R0寄存器的与推出的值一样,为22
    基于MDK创建C与汇编语言混合编程_第6张图片

三、总结

用keil5来试验c语言调用汇编语言和用汇编语言来调用c语言的过程都是一样的,无非就是调用的主体不同,不过汇编语言还是不太熟悉,需要进一步熟悉。


参考文献
STM32的C与汇编语言的混合编程

你可能感兴趣的:(golang,c语言,r语言)