文章目錄
- 一、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與彙編語言的混合程式設計