蔣仁祥
(福建師范大學(xué)數(shù)學(xué)和計算機學(xué)院,福建 福州 350007)
淺談匯編語言與C語言的混合程序設(shè)計技術(shù)
蔣仁祥
(福建師范大學(xué)數(shù)學(xué)和計算機學(xué)院,福建 福州 350007)
匯編語言實際上就是一種針對機器的語言形式,具有極快的運行速度和較小的存儲空間,可在一定條件下直接控制硬件,在多種領(lǐng)域中均得到廣泛的應(yīng)用,并具有至關(guān)重要的作用。然而在實際的編寫與調(diào)試環(huán)節(jié)中,其難度和復(fù)雜程度都是很大的,特別是混合運算環(huán)節(jié)。C語言具有極高的靈活性和表達能力,在軟件的開發(fā)環(huán)節(jié),運用匯編語言與C語言的混合程序設(shè)計技術(shù),不僅可以有效解決單一使用匯編語言處理數(shù)據(jù)時的困難,還可大幅提高實際的運行效率。文章闡述了兩種語言混合編程的具體方法,以及二者在連接時應(yīng)注意的問題,為該混合程序設(shè)計技術(shù)的推廣與應(yīng)用奠定基礎(chǔ)。
匯編語言;C語言;混合程序設(shè)計
較大程序的設(shè)計過程中,若在充分使用匯編語言程序的前提下,充分融合其他高級語言程序,這樣不僅可以全面發(fā)揮出各類程序的特點,還能實現(xiàn)二者融合所帶來的優(yōu)勢,實現(xiàn)現(xiàn)階段主流的混合編程。程序設(shè)計過程中,C語言在一定條件下,可完成匯編語言對應(yīng)子程序的調(diào)用,這一過程是可逆的,匯編語言與C語言可相互調(diào)用,另外由于C語言具有較高的表達能力,所以在被調(diào)用時匯編語言還能將對應(yīng)的語句融入其中,這是單一程序編程無法達到的,具有很高的實際價值。然而,在混合編程階段,應(yīng)密切注意匯編語言與 C語言之間的連接情況,對可能造成影響的因素進行綜合分析,確保混合編程發(fā)揮出最佳的效果。
在實際的編程過程中,將 C語言與匯編語言充分結(jié)合的編程方法主要包括四方面內(nèi)容:
(1)混合編程過程中,指定編程任務(wù)會被分成多種功能模塊,通常情況下,模塊主要以程序或者是函數(shù)的形態(tài)表現(xiàn),結(jié)合模塊的實際特點選取適宜的語言完成編程,隨后運用對應(yīng)的編譯系統(tǒng)將編程結(jié)果按要求轉(zhuǎn)換為目標(biāo)文件,最終將所有目標(biāo)文件進行連接,從而生成完整的文件。
(2)對于C語言程序而言,往往需要運用到在匯編程序中完成定義的常規(guī)變量。
(3)一般而言,可將匯編語句直接、快速編入C語言程序中,拓展了C語言程序的功能,有效解決了C語言程序無法控制硬件的缺陷。
(4)通過運用函數(shù)的方法,可在C語言內(nèi)部快速調(diào)用匯編語句。
對于 C語言程序而言,可直接完成匯編語言代碼的編寫任務(wù),將指定的匯編語句融入到 C語言程序中時,一般不需要分號,如果所選匯編語句以組的形式存在,則需使用大括號({})。匯編語句包含多種形式,可在C語言中使用的主要分為四類,分別為跳轉(zhuǎn)、串操作、分配以及一般指令等內(nèi)容。
為達到調(diào)用效果,還需從細節(jié)入手,確定匯編語言所對應(yīng)源程序的段組合是否切實滿足編譯的實際需求,如果源程序違約勢必會對調(diào)用效果造成不同程度的影響。
3.1 基本格式
匯編程序子程序格式中的開頭和末尾分別表示程序的開始與結(jié)束,均屬偽指令范疇。匯編程序子程序名實際上就是一個標(biāo)示符,由編程人員自行創(chuàng)建。另外,子程序名通常還表示匯編程序中第一條指令的實際邏輯地址,也可稱作入口地址。一般而言,類型只分兩種,分別為NEAR與FAR,不同類型會對程序中的調(diào)用及返回指令對應(yīng)的翻譯系統(tǒng)造成直接影響。處在程序中心位置的序列為程序段,程序段具備特定的功能,在程序段的末尾,通常會有一條返回指令(RET)。
3.2 子程序的基本格式
與上述基本格式相比子程序主要具備以下幾方面特點:
(1)由于C語言和匯編語言的堆棧段相同,所以,為了達到混合編程的目的,對應(yīng)的匯編程序在運行的初期必須進行兩條指令,這兩條指令分別為 PUSH BP(緩存?;罚┖蚆OVE BO,SP。
(2)C語言程序的調(diào)用對象需在PUBLIC偽操作的支持下進行說明,確定該子程序?qū)⒁煌獠克{(diào)用。
(3)C語言支持對應(yīng)子程序采用DI或SI完成變量的存儲任務(wù),由于在實際情況中,變量一般在兩個時以后進行存放,所以在C語言子程序中會生成PUSH SI/DI語句。
(4)在程序段中,不僅定義了代碼生成器、信息資料管理器還將其合成為整體的數(shù)據(jù)段(DGROUP),段組內(nèi)所用的基址是一致的。
(5)程序核心語句中應(yīng)包含返回函數(shù)值,而且該個函數(shù)值的具體位置應(yīng)處在RET語句之前。
(6)調(diào)用的返回過程需由RET語句命令。
(7)末尾處的END僅代表程序運行完畢,并為標(biāo)明實際的啟動位置。
從匯編語言的角度講,其具有的優(yōu)勢是 C語言難以媲美的,比如在輸入的過程中,匯編語言支持所有進制的數(shù)據(jù),并無需翻譯直接讀取。所以在匯編語言中調(diào)用 C語言是可以且具有一定價值的。匯編語言中各類程序的格式并沒有太大出入,主程序要求程序的開始階段具有EXTERN語句,以此表名此函數(shù)將被調(diào)用,屬外部范疇。過程語句中,可在CALL語句的支持下,完成外部函數(shù)的調(diào)用任務(wù),具體格式為CALL NEAR PTY。如果C語言程序中的子程序具備被調(diào)用的條件,則在成為匯編語言程序的子程序時,程序中可以包含 C語言函數(shù),無需添加EXTERN語句進行說明。C語言程序調(diào)用過程中軟件的堆棧分配如圖1所示。
圖1 軟件堆棧分配結(jié)構(gòu)示意圖
匯編語言與 C語言連接并混合編程的過程中,需要密切注意三方面內(nèi)容,分別為參數(shù)傳遞、調(diào)用關(guān)系和模塊連接,只有妥善處理這三方面內(nèi)容,才能有效提高匯編語言與 C語言的連接及混合編程質(zhì)量,從而真正提高程序運行效率,改善編程環(huán)境。
(1)參數(shù)傳遞
匯編語言與 C語言在連接和混合編程的過程中,參數(shù)會在一定條件下進行傳遞,一般而言,傳遞過程通常運用堆棧形式。從匯編語言的角度講,主要選取BP作為堆?;返募拇嫫鳎紫葘⒄{(diào)用過程中 C語言程序產(chǎn)生的參數(shù)進行編排和劃分,并將其壓入至堆棧當(dāng)中,如果程序在后續(xù)的運行過程中需要使用堆棧中的參數(shù)時,可再次使用BP 將參數(shù)按照實際要求和偏移量實施存取。
(2)調(diào)用關(guān)系
程序在調(diào)用之前,應(yīng)建立并完善調(diào)用關(guān)系,以此說明該子程序?qū)⒈徽{(diào)用。在調(diào)用的過程中,對應(yīng)程序應(yīng)表明自身已屬外部類型范疇,從而為后續(xù)的引用和計算提供便利,同時,調(diào)用程序同樣需要及時說明將要被引用程序的具體名稱。在確定調(diào)用關(guān)系的過程中,還需結(jié)合各類存儲模式的具體要求,確定程序的語言格式。C語言程序的小模式一般與匯編語言程序中的近類型相對應(yīng),而大模式則與遠類型相對應(yīng)。
(3)模塊連接
為確保匯編語言與 C語言連接與混合編程的可靠性,還需進一步完善兩方面工作,其一是匯編語言程序與 C語言程序所使用的存儲模式必須為一致的;其二是匯編語言程序需支持 C語言程序的命名要求,在連接和使用之前需擬定兼容合約,由于匯編語言程序的特點較為明顯,所以編程中函數(shù)及變量的命名一般以 C語言程序的要求為準(zhǔn),匯編語言程序必須嚴格遵守約定。
C語言程序中主要涵蓋了六種形式的存儲模式,分別為微型存儲模式、小型存儲模式、中型存錯模式、緊湊型存儲模式、大型存儲模式以及巨型存儲模式,由此可見,存儲模式主要由空間和大小區(qū)分。其中微型存儲模式中的程序和堆棧均處于相同段內(nèi);小型存儲模式具有數(shù)據(jù)和代碼段,實際數(shù)量均為一個。如要進行混合編程,必須確保兩個程序使用相同的存儲模式。對于匯編語言而言,Model代表此程序所用的偽指令,而后需所接內(nèi)容即為存儲模式,一般為上述模式的其中一種。如果 C語言程序使用了小型存儲模式,在匯編語言中將會表現(xiàn)為Model Small,此時兩種程序所用存儲模式為統(tǒng)一類型。由于小型存儲模式采用Near作為基礎(chǔ)指針,所以該存儲模式具有較高的運行效率,因此在實際的混合編程情況中,應(yīng)在條件滿足的情況下盡可能選用小型存儲模式。
C語言程序的編譯過程中,程序中變量及函數(shù)名稱的下方會被添加一道下劃線,為確保連接質(zhì)量,在調(diào)用子程序中,任意一種標(biāo)示符的都需添加下劃線。從C語言程序的角度講,其會對調(diào)用對象中具體變量與函數(shù)予以偽命令,以此達到說明的目的,通常將命令放置在函數(shù)與變量的外部。另外,為了保存匯編語言程序中完整的標(biāo)示符,還需使用PUBLIC操作符對指定標(biāo)示符進行定義。如果匯編語言程序需使用 C語言程序中的函數(shù),需要在所選函數(shù)的名稱前添加下劃線,同時在程序開始階段運用EXTERN語句進行說明,如圖2所示。
圖2 匯編語言程序訪問C語言程序函數(shù)
總之,匯編語言與 C語言的充分融合,打破了單一語言程序編程的局限性,兩種語言程序的特點均可得到充分的發(fā)揮,并在運行的過程中相互協(xié)調(diào),通過參數(shù)傳遞功能,還可實現(xiàn)數(shù)據(jù)信息的共享,從而為相關(guān)軟件的開發(fā)提供良好的保障,使其更加安全可靠,推動了編程事業(yè)的全面快速發(fā)展。
表1 GPU與CPU下視頻編碼時間表
本系統(tǒng)為GOP級的并行編碼算法,它利用可編程GPU以及相應(yīng)的計算統(tǒng)一設(shè)備架構(gòu)CUDA對基于AVS標(biāo)準(zhǔn)的編碼器進行加速,實現(xiàn)了一個基于GPU的AVS并行編碼器。與基于CPU上的AVS并行編碼器相比,它在保證了視頻圖像質(zhì)量同時,也在很大程度上提高了編碼的速率。
[1] 王濤.AVS視頻解碼器C語言建模研究[D].天津:天津大學(xué),2008.
[2] 陳志波.H.264運動估值4網(wǎng)絡(luò)視頻傳輸關(guān)鍵問題研究[D].北京:清華大學(xué),2003.
[3] 甘新標(biāo),沈立,王志英.基于CUDA的并行全搜索運動估計算法[J].計算機輔助設(shè)圖形學(xué)學(xué)報,2010,22(3):457-460.
[4] 張舒,褚艷利.GPU高性能運算之CUDAIM〕[M].北京:中國水利水電出版社,2009:2-141.
[5] AVS工作組.視頻編碼標(biāo)準(zhǔn) AVS 技術(shù)介紹[J].電子產(chǎn)品世界,2005,(10):58-62.
[6] 蔣興昌,周軍,羅傳飛.H.264 并行編碼算法的研究[J].電視技術(shù),2008,32(2):33-35.
Discussion about assembly language and C language programming techniques mixed
Assembly language is actually a form of language for the machine, with fast speed and less storage space, under certain conditions, the direct control of the hardware, in a variety of fields have been widely used and has to close important role. However, in the actual writing and debugging session, the difficulty and complexity are great, especially the hybrid operation links. C language with a high degree of flexibility and skills in software development aspects, the use of assembly language and C language programming mixed technology, not only can effectively solve the problems single-use assembly language processing the data, but also a substantial increase in the actual operating efficiency. Paper describes two specific methods of mixed programming languages, as well as the connection between the two in question should be noted, to lay the foundation for the promotion and application of hybrid programming techniques.
Assembly language; C language; hybrid programming
TP313
A
1008-1151(2015)02-0016-03
2015-01-11
蔣仁祥(1967-),福建平潭人,福建師范大學(xué)數(shù)學(xué)和計算機學(xué)院講師,研究方向為高校計算機教學(xué)。