問(wèn):我該怎么寫一個(gè)將被C調(diào)用的匯編函數(shù)?
答:一個(gè)最簡(jiǎn)單的學(xué)習(xí)怎么寫匯編的方式是,先用C寫這個(gè)代碼的簡(jiǎn)單版本,然后用編譯器將它編譯成為匯編代碼。然后你就可以用這個(gè)輸出的匯編代碼作為你自己匯編函數(shù)的模板。例如:
你說(shuō)你想寫一個(gè)帶有“l(fā)ong”類型參數(shù)的匯編子程序,那么首先用C寫一個(gè)函數(shù):
void MyAsmFunc(unsigned long parameter)
{
}
好了,現(xiàn)在編譯它產(chǎn)生匯編代碼。PICC編譯器的-S選項(xiàng)可以。
picc -16f877 -S file.c
這個(gè)命令將產(chǎn)生"file.as",打開(kāi)它,它看起來(lái)像下面這樣:
; param _parameter assigned to ?_MyAsmFunc+0
_MyAsmFunc$parameter set ?_MyAsmFunc+0
psect text1,local,class=CODE,delta=2
global _MyAsmFunc
signat _MyAsmFunc,4216
psect text1
_MyAsmFunc
bcf 3,6
bcf 3,5
return
因?yàn)镻ICC編譯器會(huì)讓函數(shù)的bank回零。所以我們?cè)谶@里看到它在return之前把bank回到bank0。從這個(gè)匯編代碼開(kāi)始,你可以擴(kuò)充你的匯編代碼。函數(shù)的參數(shù)可以使用_MyAsmFunc$paramter符號(hào)來(lái)訪問(wèn)。這個(gè)符號(hào)訪問(wèn)的是第一個(gè)字節(jié),其余的字節(jié)就在符號(hào)上加偏移量,例如:
_MyAsmFunc$parameter+2
這將引用第三個(gè)字節(jié)。
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4371瀏覽量
64230 -
編譯器
+關(guān)注
關(guān)注
1文章
1656瀏覽量
49905
發(fā)布評(píng)論請(qǐng)先 登錄
C語(yǔ)言函數(shù)調(diào)用過(guò)程中的內(nèi)存變化解析
匯編語(yǔ)言模塊調(diào)用C++函數(shù)實(shí)例
C函數(shù)調(diào)用機(jī)制與棧幀原理詳解

如何使用內(nèi)聯(lián)函數(shù)法調(diào)用匯編函數(shù)?
匯編調(diào)用C1、用c編寫函數(shù)
C++教程之函數(shù)的遞歸調(diào)用
如何在c51程序中調(diào)用匯編函數(shù)
Linux匯編與C互相調(diào)用
C和匯編如何互相調(diào)用?
EE-128:C++中的DSP:從C++調(diào)用匯編類成員函數(shù)

C語(yǔ)言代碼中調(diào)用匯編函數(shù)需要注意什么
在匯編中調(diào)用C函數(shù)
EE-128:C語(yǔ)言中的DSP:從C調(diào)用匯編類成員函數(shù)

評(píng)論