天天看點

基于MDK建立C與彙編語言混合程式設計一、C語言嵌入彙編語言二、彙編語言嵌入c語言三、總結

文章目錄

  • 一、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,如下圖:

基于MDK建立C與彙編語言混合程式設計一、C語言嵌入彙編語言二、彙編語言嵌入c語言三、總結

二、彙編語言嵌入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與彙編語言的混合程式設計

繼續閱讀