龐新法 PANG Xin-fa
(陜西省委黨校科技教研部,西安 710061)
(Research and Technology Department,Shaanxi Province Party School of the CPC,Xi'an 710061,China)
匯編語言是一種面向機(jī)器的語言,其優(yōu)點(diǎn)是運(yùn)行速度快,占用存儲空間小,可直接對硬件進(jìn)行控制。缺點(diǎn)是編寫、調(diào)試?yán)щy、移植性差。C語言簡潔、靈活、庫函數(shù)豐富、調(diào)試方便、移植性好,目前已被廣泛地應(yīng)用于系統(tǒng)軟件和應(yīng)用軟件的開發(fā)中,為了發(fā)揮各自優(yōu)勢,取長補(bǔ)短,采用混合編程。大部分程序,如界面、人機(jī)接口(外殼程序)、數(shù)據(jù)處理等用C語言編寫,以提高程序的開發(fā)效率。而某些程序,如需要縮短程序的運(yùn)行時間,或需要對硬件進(jìn)行直接操作,或需要利用操作系統(tǒng)的某些功能模塊,或頻繁使用的程序、或需要占用內(nèi)存空間少的程序(內(nèi)核程序),則用匯編編寫,以提高程序的運(yùn)行效率。
嵌入式匯編也稱行內(nèi)匯編,源程序中直接插入?yún)R編語句。匯編語句可直接訪問C程序中定義的常量、變量、函數(shù)。不必考慮二者之間的接口,方便編程。
格式:asm操作碼操作數(shù)[;或換行]
其中:操作數(shù)可以是匯編語句中的立即數(shù)、寄存器、表達(dá)式等還可以是C中的常量、變量、標(biāo)號等。分號;是匯編語句結(jié)束符,并非注解,要用注解,用C的注解。如下例所示。
嵌入的匯編語句可以訪問C語言程序中的任何標(biāo)識符,包括變量、常量、標(biāo)號、函數(shù)名、寄存器變量、函數(shù)參數(shù)等。如下例所示。
①C語句訪問寄存器,必須在寄存器名前加一個下劃線。如例2中的return_AX;
②asm、C語句均可以有標(biāo)號,但不能用asm語句定義標(biāo)號。
③匯編語句的數(shù)據(jù)定義放在函數(shù)外面,指令放在函數(shù)里面。
所有在函數(shù)外的的匯編語句都作為數(shù)據(jù)聲明處理,即在編譯器編譯時會將它放在數(shù)據(jù)段中,也就是說不可以在函數(shù)外面寫匯編命令語句,把指令當(dāng)數(shù)據(jù)。
所有在函數(shù)內(nèi)的匯編語句必須是指令性語句,在編譯后都放在代碼段中。也就是說不可以在函數(shù)內(nèi)使用匯編數(shù)據(jù)定義語句,把數(shù)據(jù)當(dāng)指令。
④不要在以asm開頭的語句中使用C語言的關(guān)鍵字,這會導(dǎo)致編譯錯誤
命令行鍵入命令:TCC-B-Iinclude-Llib文件名.c即可.TCC會自動調(diào)用TASM.EXE和TLINK.EXE,并且TLINK.EXE能正確的找到需要的.obj和.lib文件,要保證TC目錄下存在TASM.EXE文件。如果單步編譯,可能會碰到很多的問題,主要是TLINK.EXE不會自己去找.obj和.lib文件。該命令的功能是:.C→編譯TCC→.ASM→匯編TASM→.OBJ→連接TLINK→.EXE。
C、匯編程序各自編程,各自編譯,然后連接在一起。
①命名約定:匯編的名字前加一個下劃線,C的名字前不加下劃線(編譯后內(nèi)部自動加),以確保兩個模塊內(nèi)部名字一致。
運(yùn)行結(jié)果是:456B123
但是,如果匯編程序設(shè)置采用C語言類型,則標(biāo)識符前不加下劃線,(匯編后內(nèi)部自動加),以確保兩個模塊內(nèi)部名字一致。
②聲明約定:匯編、C模塊對自己未定義但要用的別的模塊的名字要聲明。
C模塊聲明格式:函數(shù)聲明格式:extern類型函數(shù)名(形參表);如例5 z1.c。
變聲明格式:Extern類型變量;
匯編模塊聲明格式:函數(shù)聲明格式:extern函數(shù)名:屬性(near,far)。
變聲明格式:Extern變量名:屬性(byte,word,dword等)
自己定義的可供別的模塊引用的也必須聲明。
匯編模塊聲明格式:PUBLIC名字(變量名或函數(shù)名)如例6 z2.asm。
C模塊聲明格式:全局變量,函數(shù)名前不加static即可。
③寄存器要保護(hù):C調(diào)匯編程序時,匯編子程序中用到的寄存器最好全部保護(hù),退出時恢復(fù),以免影響主程序C的執(zhí)行。
④C、匯編程序存貯模式要一致。
①TASM文件名,把匯編程序翻譯成目標(biāo)程序。TCC C文件名,把C程序翻譯成目標(biāo)程序,C只編譯不連接。②TLINK把若干個目標(biāo)程序連接成一個EXE程序。③運(yùn)行。
混合編程,主要涉及接口,匯編調(diào)C的函數(shù)、全局變量。C調(diào)匯編的函數(shù)、變量。本文對此做了淺述。
[1]譚浩強(qiáng).C語言程序設(shè)計(jì)[M].清華大學(xué)出版社,2004.
[2]丁愛萍.C語言程序設(shè)計(jì)實(shí)例教程[M].西安電子科技大學(xué)出版社,2006.
[3](美)布魯姆著,馬朝暉譯.編語言程序設(shè)計(jì)[M].北京:機(jī)械工業(yè)出版社,2006.