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