您的位置:網站首頁 > 電器維修資料網 > 正文 >
單片機C語言與匯編語言的接口方式
來源: 日期:2013-12-18 14:01:56 人氣:標簽:
兩種語言混合編程,首先要解決接口問題。C語言跟匯編語言之間有兩種接口方式:
1、模塊內接口
是指在C程序中嵌入匯編程序。使用#pragma語句來實現,其格式如下:
#pragmaASM;匯編程序
#pragmaENDASM
這種方法是通過ASM與ENDASM告訴C51編譯器,中間行不用編譯為匯編行,由編譯控制指令SRC來控制并將這些不用編譯的行存入其中。因此,使用這種方法,在KeilC51中要作如下設置:先將嵌有匯編語句的源文件加入到要編譯的工程文件中,然后右擊該文件,選擇“OptionforFile‘name.C’”,并將“Properties”選項卡中的“GenerateAssemblerSRCFile”和“AssembleSRCFile”兩項設置為有效,再將“LinkPublICOnly”項設置為無效。
這種方法可以在C語言源代碼的任意位置嵌入匯編語句。
2、模塊間接口
這種接口方式是把C和匯編源程序各自編輯、調試,并用各自的語言編譯器進行編譯,生成obj文件(即目標文件),然后用連接程序將obj文件連接起來。在這種接口方式下,需要注意C函數與匯編函數之間的參數傳遞,以保證模塊間的數據交換。C51中提供兩種參數傳遞的方式。
(1)通過寄存器進行參數傳遞
為了能產生高效代碼,C51函數 多可以通過CPU寄存器傳遞3個參數,其傳遞規則如下表所示。
(2)通過固定存儲區進行參數傳遞
如果函數間參數傳遞較多,超過了寄存器的限度,那么,部分參數可以在固定的存儲區域內傳送。此時所使用的地址空間依賴于所選擇的存儲器模式。這種參數傳遞技術的傳遞途徑非常清晰,但代碼效率不高、速度較慢。當然,也可以在源程序中選擇編譯控制命令“# pragma NOREGPARMS”,使所有參數傳遞都在固定的存儲區域進行,以降低代碼的編寫難度。
在函數相互調用過程中,當函數具有返回值時,需要把函數值作為參數進行傳遞,這種返回值參數的傳遞均是通過CPU 內部寄存器完成,其傳遞規則如下表所示。
【看看這篇文章在百度的收錄情況】
相關文章
- 上一篇: 三極管的工作狀態及在電路中的作用
- 下一篇: 單片機函數的聲明及段的命名規則