給大家分享一個Keil軟件“C語言”與“匯編”混編教程,給需要 C與匯編 混編的同學
用 Keil 在C中嵌入?yún)R編 1
在 Keil 中嵌入?yún)R編 2
介紹直接嵌入?yún)R編代碼的方法 4
采用匯編可能會有的好處 5
Keil C 語言與匯編語言混合編程 7
深入剖析 Keil C51 —— 從匯編到 C51 9
C 語言和匯編語言的變量以及函數(shù)的接口問題 14
匯編與 C 語言混合編程的關鍵問題 15
KEIL 段重定位 15
用 Keil 在 C 中嵌入?yún)R編
早前公布了C和匯編混編的溫度控制器程序,收到一些朋友的詢問,他們無法在自己程序中使用我的18B20的匯編子程序或無法正常通過混編后的程序編譯。
其實在KEIL 中嵌入?yún)R編的方法很簡單。 如圖一, 在 C 文件中要嵌入?yún)R編的地方用#pragma asm 和#pragma endasm分隔開來,這樣編譯時 KEIL 就知道這中間的一段是匯編了。
0.png (113.3 KB, 下載次數(shù): 53)
下載附件
2017-11-15 20:06 上傳
0.png (40.74 KB, 下載次數(shù): 65)
下載附件
2017-11-15 20:07 上傳
為了能對匯編進行封裝還要在項目中加入相應的封裝庫文件, 在筆者的項目中編譯模式是小模式所以選用
C51S.LIB。這也是最常用的。這些庫文件是中 KEIL 安裝目錄下的 LIB 目錄中。 加好后就可以順利編譯了。(注:
我只在 7.0以上版本使用過)
0.png (44.88 KB, 下載次數(shù): 53)
下載附件
2017-11-15 20:07 上傳
在 Keil 中嵌入?yún)R編
1、其實在 KEIL 中嵌入?yún)R編的方法很簡單。如圖 1,在 C 文件中要嵌入?yún)R編的地方用#pragma asm 和#pragma endasm 分隔開來,這樣編譯時 KEIL 就知道這中間的一段是匯編了。
0.png (151.98 KB, 下載次數(shù): 48)
下載附件
2017-11-15 20:08 上傳
2、在有加入?yún)R編的文件中,還要設置編譯該文件時的選項,如圖 2 所示。
0.png (78.21 KB, 下載次數(shù): 54)
下載附件
2017-11-15 20:08 上傳
3、Generate Assembler SRC File 生成匯編 SRC 文件 Assemble SRC File 封裝匯編文件
(如圖 3 的狀態(tài)為選中)
選上這兩項就可以在 C 中嵌人匯編了,設置后在文件圖示中多了三個紅色的小方塊。
0.png (64.73 KB, 下載次數(shù): 57)
下載附件
2017-11-15 20:09 上傳
4、為了能對匯編進行封裝還要在項目中加入相應的封裝庫文件, 在筆者的項目中編譯模式是小模式所以選用 C51S.LIB。這也是最常用的。這些庫文件是中 KEIL 安裝目錄下的 LIB 目錄中。 加好后就可以順利編譯了
0.png (91.38 KB, 下載次數(shù): 60)
下載附件
2017-11-15 20:09 上傳
介紹直接嵌入?yún)R編代碼的方法
1、在 C 文件中要嵌入?yún)R編代碼片以如下方式加入?yún)R編代碼:
#pragma ASM
; Assembler Code Here
#pragma ENDASM
2、在 Project 窗口中包含匯編代碼的 C 文件上右鍵,選擇“Options for ...”,點擊右邊的“Generate Assembler SRC File”和“Assemble SRC File”,使檢查框由灰色變成黑色(有效)狀態(tài);
3、根據(jù)選擇的編譯模式,把相應的庫文件(如 Small 模式時,是 Keil\C51\Lib\C51S.Lib)加入工程中, 該文件必須作為工程的最后文件;
0.png (186.91 KB, 下載次數(shù): 63)
下載附件
2017-11-15 20:10 上傳
采用匯編可能會有的好處
C51 編譯器能對 C語言程序進行高效率的編譯,生成高效簡潔的代碼,在大多數(shù)的應用場合,采用 C語言編程即可完成預期的任務,但是,在有些場合還是會用到匯編,例如在下面的幾種情況下,采用匯編可能會有很多好處:
1、已有程序的移植:在單片機領域工作很久的工程人員可能會保留有很多的早期用匯編語言編制的程序模塊,并且這些模塊已經(jīng)經(jīng)過實際應用的驗證,如果重新用 C編程,可能工作量很大,這時就可以用嵌入?yún)R編的方式把以前的匯編模塊植入新的應用,可以明顯的加快開發(fā)的進度。
2、局部功能需要足夠短的執(zhí)行時間:在有些應用中,部分的功能模塊需要有很高的執(zhí)行效率,而有些匯編的指令在 C中沒有對應的指令,這給我們對單片機的高效操作帶來困難,嵌入?yún)R編可是我們的程序執(zhí)行更有效率。
3、對一些特定地址進行操作:在 C中我們要對特定地址進行讀寫,一般用以下兩種方式:用_AT_指令定義變量; 定義指向外部端口或數(shù)據(jù)地址的指針; 在匯編中只需要使用 MOVX A,@DPTR或MOVX @DPTR,A 就可以了,
這樣可以增強程序的可讀性。
4、其他的需要匯編的應用:在這里我們不可能舉出所有可能要用匯編的例子,在你的應用中,你可能在一個或多個應用中感到 C語言的不足,而需要用到匯編指令,請你記住,可以在 C中嵌入?yún)R編子程序,這對你的程序非常有用。
0.png (119.08 KB, 下載次數(shù): 59)
下載附件
2017-11-15 20:12 上傳
完整的pdf格式文檔51黑下載地址(共17頁):
Keil軟件“C語言”與“匯編”混編-——-相關知識整理.pdf
(421.94 KB, 下載次數(shù): 100)
2017-11-15 14:09 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|