營口理工學(xué)院 李洪剛
試論匯編語言與C語言的混合程序設(shè)計技術(shù)
營口理工學(xué)院 李洪剛
匯編語言與C語言分別是計算機(jī)編程過程中兩種不同類型的語言,既可單獨用于單獨編程,亦可混合使用,而在實際的軟件開發(fā)設(shè)計過程中,為最大程度提高工作效率,拓展軟件性能以及維護(hù)其性能的穩(wěn)定性,往往混合采用兩種不同的語言。本文主要就匯編語言與C語言的混合程序設(shè)計技術(shù)進(jìn)行探索研究,并分別從C語言調(diào)用混編語言子程序等方面進(jìn)行分析,以期為提高計算機(jī)程序的運行效率提供相應(yīng)的理論參考和支持。
匯編語言;C語言;混合;程序設(shè)計
C語言是目前計算機(jī)高級編程過程中應(yīng)用最為廣泛的語言的之一,與其它編程語言相比,其具有良好的功能性以及靈活性等方面的特點;與C語言相比,匯編語言具有運算速度快等方面的特點,在軟件開發(fā)或者是程序設(shè)計過程中,通過使用匯編語言則可以通過提高儲存器的運算速度來有效提升其儲存空間。將C語言和匯編語言有機(jī)結(jié)合在一起,則可以充分利用兩者的優(yōu)勢,從而實現(xiàn)高質(zhì)量、高效率的任務(wù)設(shè)計目的。
在軟件開發(fā)或者是程序設(shè)計過程中,對匯編語言與C語言進(jìn)行混合編程作業(yè)的過程中,主要可以分為以下三種類型:
1.1 C語言調(diào)用匯編語言子程序
在計算機(jī)軟件開發(fā)設(shè)計或者是程序編程過程中,若采用C語言進(jìn)行編程所調(diào)用的匯編語言指令較多,則可以在C語言編程過程中直接調(diào)用匯編語言子程序的格式,以提高編程工作效率,但在采用C語言進(jìn)行編程的過程中,其所采用的C語言編譯系統(tǒng)往往是有固定的、約束成型的段組合。這就意味著,在C語言編程過程中調(diào)用匯編語言子程序時,要確保匯編語言子程序要遵守并符合C語言編譯系統(tǒng)所要求的段組合順序及相關(guān)約定,具體表現(xiàn)如下:一是在匯編語言的子程序內(nèi)要按照約定或者是相關(guān)規(guī)定采用“EXTERN”對函數(shù)顯示進(jìn)行相關(guān)說明,并在此基礎(chǔ)上將其作為連接C語言及匯編語言子程序的接口;此外,在此過程中要注意下事項,即在函數(shù)名字的設(shè)置過程中,要確保其在8個字符以內(nèi),并選用下劃線格式;
二是在匯編語言子程序內(nèi)部參數(shù)順序的設(shè)置過程中,要根據(jù)其原有的標(biāo)準(zhǔn)順序作反向順序;之后,再講參數(shù)依次嵌入棧中,也即指,在參數(shù)設(shè)置中,要將原有標(biāo)準(zhǔn)參數(shù)順序中的最后一個參數(shù)首先壓入棧中,且地址最高,并以此類推;
三是對匯編語言子程序內(nèi)的代碼段要加以說明,并以“-TEXT”為命名原則,對子程序內(nèi)的加代碼段進(jìn)行命名;此外,在對匯編語言子程序過程進(jìn)行選擇和確定的過程中,要嚴(yán)格以C程序的模式為依據(jù),也即為,C語言程序的小模式對應(yīng)匯編語言子程序的近過程,而大模式則對應(yīng)遠(yuǎn)過程;
四是在匯編語言子程序參數(shù)確定的過程中,一般選用C語言程序的參數(shù)作為匯編程度的參數(shù),但要注意的是,當(dāng)匯編語言子程序遠(yuǎn)過程返回地址時,其一般需要占據(jù)4個字符,而BP的壓入則需要占用2個字符,因此,在確定匯編語言子程序遠(yuǎn)過程參數(shù)的過程中,其首個參數(shù)的位置要選擇在BP+6指向的單元;同理,匯編語言子程序近過程參數(shù)的選擇需要確定在BP+4指向的單元;
五是匯編語言程序在運行或者是使用的過程中需要兼顧保護(hù)寄存器,而C語言程序在調(diào)用匯編語言子程序的過程中會使得寄存器的數(shù)量在2個以上,其中的多余部分則自動轉(zhuǎn)入棧中進(jìn)行儲存,因此,在調(diào)用匯編語言子程序的過程中,匯編過程必須要遵循相應(yīng)的格式,以滿足程序運行需求。
1.2 匯編語言調(diào)用C語言子程序
匯編語言在計算機(jī)硬件方面加強(qiáng)的控制作用力等方面優(yōu)勢使得在計算機(jī)開發(fā)設(shè)計以及編程過程中,匯編語言可以實現(xiàn)對C語言子程序的調(diào)用,以有效利用C語言程序在編程中所具有的優(yōu)勢,但要注意的是,在調(diào)用C語言子程序的過程中,并不需要改變匯編語言程序的格式,而是要確保其子程序及主程序格式的一致性,并分別在主、子程序開始運行前加上“EXTREN”函數(shù)名,以作為匯編語言程序調(diào)用C語言子程序的外部函數(shù),在此基礎(chǔ)上,則可以通過匯編語言程序主過程中的CALL語句對C語言子程序進(jìn)行調(diào)用,以實現(xiàn)較高的工作效率。
1.3 C語言程序嵌入?yún)R編語言程序中
C語言程序嵌入?yún)R編語言程序中主要存在有兩種嵌入方式,并分別應(yīng)用在不同的編程情況下,具體表現(xiàn)為:一是C語言程序調(diào)用匯編語言子程序模塊的嵌入方式,在該種嵌入方式中要謹(jǐn)遵以下模塊劃分原則,以實現(xiàn)兩者的合理搭配:為達(dá)成軟件開發(fā)設(shè)計或者是編程設(shè)計任務(wù)需求,在選用該種嵌入方式的過程中,每個模塊的體現(xiàn)形式均應(yīng)該表現(xiàn)為函數(shù)或者是過程,并在此基礎(chǔ)上選擇相應(yīng)的編寫語言進(jìn)行程序編寫;要注意的是,若在編程過程中,主程序選擇C語言進(jìn)行編寫或者是含有部分C語言,而模塊選擇匯編語言進(jìn)行程序編寫,則需要在編寫時充分利用C語言程序調(diào)用匯編語言子程序進(jìn)行子模塊匯編,并在此基礎(chǔ)上,根據(jù)主程序以及模塊各自的特點形成特定的目標(biāo)代碼模塊,再將不同的目標(biāo)代碼模塊相連接,最終形成相應(yīng)的可執(zhí)行文件,實現(xiàn)C語言程序?qū)R編語言子程序模塊的有效調(diào)用;
二是在C語言程序中嵌入?yún)R編指令,該種嵌入方式主要適用在C語言程序無法實現(xiàn)對硬件的有效控制過程中,如調(diào)整寄存器的值或者是某種功能的重復(fù)性使用等,都可通過在C語言編程過程中嵌入?yún)R編指令實現(xiàn);在此過程中要注意的是,寄存器的命名以及MASM.EXE程序的拷貝等,要儲存在特定的目錄下,以便于進(jìn)行編譯。
在匯編語言和C語言混合程序的設(shè)計過程中,為保障編程質(zhì)量,要注意C語言與匯編語言連接的參數(shù)傳遞、調(diào)用關(guān)系確定以及C語言與匯編語言程序間的模塊連接三方面的關(guān)鍵性問題,以有效彌補(bǔ)兩種語言在編程過程中存在的不足之處,具體表現(xiàn)如下:
2.1 參數(shù)的傳遞
在匯編語言以及C語言回合程序的設(shè)計過程中,在參數(shù)傳遞方面,往往采用堆棧進(jìn)行參數(shù)傳遞,具體是指,在C語言的匯編過程中,通常將BP基址作為原來數(shù)據(jù)的儲存器,而其匯編參數(shù)則儲存在堆棧成的儲存器中,并通過在BP基址上加入不同的偏移量來實現(xiàn)對參數(shù)的有效使用,完成參數(shù)的傳遞任務(wù)。
2.2 調(diào)用關(guān)系的確定
調(diào)用關(guān)系的確定是有效保障匯編語言與C語言混合程序設(shè)計質(zhì)量的重要基礎(chǔ)。因此,在匯編語言及C語言混合程序的設(shè)計過程中,首先要明確兩者之間的調(diào)用關(guān)系,具體包括:一是在C語言或者是匯編語言程序函數(shù)或者是過程調(diào)用之前,首先要進(jìn)行相應(yīng)的說明,并建立起恰當(dāng)?shù)恼{(diào)用關(guān)系,詳細(xì)說明調(diào)用程序或者是函數(shù)的外部類型及引用的外部模塊等方面內(nèi)容;二是要依據(jù)儲存模式確定相應(yīng)的匯編語言格式,如大模式C語言程序?qū)?yīng)匯編語言程序的遠(yuǎn)類型過程等。
2.3 C語言程序及匯編語言程序的模塊連接
為保證C語言程序與匯編語言程序模塊連接的正確性和有效性,在進(jìn)行連接的過程中,要滿足以下兩方面要求:一是匯編語言程序模塊與C語言程序模塊儲存方式的一致性,且在命名的過程中,匯編語言程序模塊必須服從C語言程序模塊兼容的命名約定;二是在C語言的編譯過程中,其變量及函數(shù)名稱下方都要添加相應(yīng)的下劃線,以保障連接質(zhì)量。
綜合上述可知,在軟件開發(fā)設(shè)計或者是計算機(jī)編程過程中,為提高軟件性能以及編程效率可以將匯編語言與C語言有效結(jié)合起來進(jìn)行混合編程,以實現(xiàn)兩種語言的優(yōu)勢互補(bǔ)。因此,在進(jìn)行計算機(jī)編程或者是軟件開發(fā)設(shè)計時,要注重匯編語言與C語言的混合使用,以有效實現(xiàn)兩種語言程序的參數(shù)傳遞以及數(shù)據(jù)共享等,大大提高軟件開發(fā)效率,提高軟件開發(fā)與編程的安全實用性。
[1]楊波.探究匯編語言與C語言的混合程序設(shè)計技術(shù)[J].電子技術(shù)與軟件工程,2015(16).
[2]印德彬. 匯編語言與C語言的混合程序設(shè)計技術(shù)[J].電子技術(shù)與軟件工程.,2015(02).
[3]康晶晶.匯編語言與C語言的混合程序設(shè)計技術(shù)[J].計算機(jī)時代,2013(06).
[4]陳久婭.C語言與匯編語言的混合程序設(shè)計技術(shù)研究[J].電子制作,2013,(04).
李洪剛(1973—),男,大學(xué)本科,營口理工學(xué)院高級教師,研究方向:數(shù)學(xué)與計算機(jī)科學(xué)。