本站小編為你精心準(zhǔn)備了計算機(jī)程序C#和匯編語言混合程序設(shè)計參考范文,愿這些范文能點(diǎn)燃您思維的火花,激發(fā)您的寫作靈感。歡迎深入閱讀并收藏。
摘要:C#和匯編語言被廣泛地應(yīng)用于計算機(jī)各類軟件的編程中,是兩種具有不同特征的編程語言。在計算機(jī)程序設(shè)計中,c#和匯編語言混合編程,通過發(fā)揮各自的優(yōu)勢,實(shí)現(xiàn)兩種語言之間的轉(zhuǎn)化,可以提升軟件運(yùn)行效率,實(shí)現(xiàn)兩種語言共通。主要對計算機(jī)程序設(shè)計中C#和匯編語言混合程序設(shè)計進(jìn)行了研究,希望能夠?yàn)橛嬎銠C(jī)程序設(shè)計提供一些幫助。
關(guān)鍵詞:計算機(jī)程序設(shè)計;C#語言;匯編語言;混合程序
在計算機(jī)程序設(shè)計中,C#和匯編語言對程序的有效性具有非常重要的作用,它們各自具有固有的特性和能最大限度發(fā)揮其特性的應(yīng)用場景。其中C#語言對計算機(jī)程序設(shè)計的有效性具有重要的作用,是計算機(jī)程序設(shè)計中使用的重要通用語言,是一種基礎(chǔ)性計算機(jī)語言,能夠簡化編程過程。而匯編語言具有空間小、效率高的特征,是運(yùn)用機(jī)器編制的語言程序。當(dāng)前,計算機(jī)程序設(shè)計的開發(fā)和更新都需要在C#語言的基礎(chǔ)上完成。而匯編語言與機(jī)器語言一樣,屬于低級語言,在匯編語言使用階段中,為了發(fā)揮匯編語言的重要作用,一般情況下,程序設(shè)計人員都會使用4種不同的指令進(jìn)行程序設(shè)計。而在編程過程中,為了提升軟件的開發(fā)效率,將兩種語言結(jié)合使用,其中借助C#語言編程能夠?qū)崿F(xiàn)空間的高效利用。
1C#與混編語言
1.1C#語言程序設(shè)計
在C#語言程序設(shè)計中,為了提升程序的運(yùn)算效率,常常采用歸納和演繹兩種數(shù)學(xué)思維,以簡化C#語言程序?yàn)榻Y(jié)構(gòu),將編程人物轉(zhuǎn)換為數(shù)據(jù)結(jié)構(gòu)。C#語言具有匯編語言的特點(diǎn),技術(shù)人員通過指針的操作達(dá)到調(diào)用底層硬件的目的。在軟件編程階段種,C#語言是一種高級程序語言,對于提升設(shè)計質(zhì)量具有顯著的作用,應(yīng)用非常廣泛,尤其是在Linux軟件編程環(huán)節(jié),C#語言對當(dāng)前程序設(shè)計質(zhì)量具有顯著的提升,技術(shù)人員非常重視該程序語言。在C#語言程序設(shè)計環(huán)節(jié),為了充分發(fā)揮C#語言的優(yōu)勢,技術(shù)人員應(yīng)該增強(qiáng)控制參數(shù)與變量的問題,從而促進(jìn)C#語言的長時間發(fā)展。C#語言是面向過程的語言,任務(wù)約束條件能夠轉(zhuǎn)化為數(shù)量關(guān)系,任務(wù)邏輯框圖的繪制是實(shí)操編程的前提,能夠達(dá)到復(fù)雜任務(wù)的編程實(shí)現(xiàn),并且通過邏輯框圖,可以促使編程有序簡潔地實(shí)現(xiàn),明確各程序間的邏輯。在目前的計算機(jī)程序設(shè)計中,由于C#語言能夠以簡易的方式,對低級存儲器進(jìn)行編譯、處理而大受歡迎,其能夠產(chǎn)生少量的機(jī)器碼,(1)高級語言基本結(jié)構(gòu)和語句低級方面,其能夠提升語言實(shí)用性;(2)使用、維護(hù)和調(diào)試方面,C#語言能夠?qū)崿F(xiàn)代碼級別的跨平臺,具有顯著的便捷性;(3)結(jié)語語言方面,C#語言具有分隔代碼和數(shù)據(jù)的優(yōu)勢;(4)C#語言具有利用使用指針的優(yōu)勢,能夠提升計算機(jī)程序設(shè)計的便捷性。因此,計算機(jī)程序設(shè)計中,C#語言的使用廣泛,能夠?yàn)橛嬎銠C(jī)程序設(shè)計的規(guī)范化和標(biāo)準(zhǔn)化提供保障。
1.2匯編語言程序設(shè)計
匯編語言是采用較為易讀的邏輯語句,根據(jù)二進(jìn)制語言基礎(chǔ)來設(shè)計的機(jī)器語言,數(shù)據(jù)運(yùn)算的實(shí)現(xiàn)可以直接調(diào)用內(nèi)存地址。相對于高級語言來說,匯編語言可以最大程度地發(fā)揮機(jī)器硬件系統(tǒng)功能,接近機(jī)器所能識別的二進(jìn)制語言,在編輯時,更容易發(fā)現(xiàn)程序和語句的錯誤,并且內(nèi)存占用較小、編譯速度快、后期維護(hù)簡單。當(dāng)前,在匯編語言程序設(shè)計環(huán)節(jié),技術(shù)人員應(yīng)不斷開辟內(nèi)存區(qū),重視數(shù)據(jù)的初始化,定義一些變量,并為了確保匯編語言程序設(shè)計能夠發(fā)揮自身作用,應(yīng)充分調(diào)動設(shè)備的硬件資源,通過逐步健全當(dāng)前程序設(shè)計,完成各項(xiàng)操作。在使用匯編指令中,技術(shù)人員可以使用“,”隔開,使用不同的表達(dá)式;在編程階段中,如果存在一條使用行數(shù)多、內(nèi)容多的指令,續(xù)行需要用符號“/”,并且技術(shù)人員也可以使用“;”隔開多個指令,提升操作質(zhì)量;注釋行的開頭可以用“;”來表示,但匯編編程階段不能再用“;”。
2C#與匯編語言混合程序設(shè)計方法
C#和匯編語言混合編程的具體方法主要由4種:(1)一般情況下,在混合編程過程中,可以將一個任務(wù)分成若干模塊,并且這些模塊的功能不同,是以函數(shù)或者子程序的形式存在,為了將多個目標(biāo)文件連接在一起,應(yīng)根據(jù)每個模塊的特點(diǎn),選用合適的語言獨(dú)立編程,然后為了使其編譯形成目標(biāo)文件,應(yīng)該使用相應(yīng)的語言編譯系統(tǒng),建立一個完整的可執(zhí)行文件;(2)在C#語言程序中,為了實(shí)現(xiàn)C#語言無法實(shí)現(xiàn)的硬件控制功能,可以直接內(nèi)嵌匯編語句;(3)在C#語言程序中,應(yīng)使用匯編程序中定義的變量和常量;(4)應(yīng)直接用匯編語言語句來調(diào)用內(nèi)部函數(shù)。
2.1C#語言調(diào)用匯編語言子程序
軟件編程環(huán)節(jié)、匯編語言指令較多,因此,在軟件設(shè)計環(huán)節(jié)中,為了便于C#語言主程序能夠發(fā)揮自身重要作用,技術(shù)人員應(yīng)重視匯編語言與C#語言的混合使用,通過子程序的形式,有效調(diào)用匯編語言編程,從而實(shí)現(xiàn)提升軟件編程工作效率的目的。并且匯編語言的程序要按照要求來編寫,按照一定的順序進(jìn)行,才能確保在C#語言程序中使用匯編語言。在對匯編語言的程序進(jìn)行編寫中,為了形成初始化數(shù)據(jù),一般都是先對函數(shù)名進(jìn)行定義之后,才定義變量,最后是編寫程序的語句,并將匯編語言程序作為當(dāng)前軟件設(shè)計的一個子程序。(1)在C#語言主程序中,為了將匯編子程序調(diào)用說明為外部函數(shù),匯編語言子程序的函數(shù)主要采用“EXTERN”關(guān)鍵字來顯示,具體形式;EXTERN返回值類型過程名(參數(shù)說明)。并且,應(yīng)采用下劃線長度不多于8個字符的格式來顯示程序中函數(shù)名字。(2)C#主程序和匯編程序在混合編程中供應(yīng)一個堆棧段,將原有的標(biāo)準(zhǔn)參數(shù)順序倒置來設(shè)置匯編子程序參數(shù)順序。即原有順序中的第一個參數(shù)最后一個入棧且地址最低。經(jīng)由AX和DX寄存器實(shí)現(xiàn)匯編子程序的返回值寄存,寄存返回值低16位用AX,寄存返回值高16位用DX。如圖1所示。(3)匯編程序段的命名以“-TEXT”的形式,并說明匯編指令;為了實(shí)現(xiàn)所設(shè)計軟件的順利編譯,身處同一編譯環(huán)境中的程序往往由多種編程語言數(shù)據(jù)的存儲方式,需要保證參數(shù)存儲方式的一致性。(4)為了使匯編指令在C#語言程序中有效顯示,應(yīng)使用PUBLIC偽操作來定義匯編程序中的字符。同時,在RET語句之前,放置匯編子程序函數(shù)數(shù)值的返回指令。
2.2匯編語言調(diào)用C#語言子程序
軟件編程人員在編譯環(huán)節(jié)中,應(yīng)對C#語言子程序的編譯工作加以重視,重視匯編語言優(yōu)異性能。在匯編語言使用階段,為了提升軟件編程工作質(zhì)量,技術(shù)人員應(yīng)制定更為詳細(xì)的應(yīng)對方案,將C#語言程序作為匯編程序的主程序。在程序設(shè)計階段,技術(shù)人員應(yīng)通過外部函數(shù)的形式,借助C#語言程序子完成調(diào)用工作,但不改變匯編語言的格式。在匯編語言程序編譯階段中,為了提升當(dāng)前軟件編程工作效率,技術(shù)人員應(yīng)重視整體程序的一致性和C#程序的有效調(diào)用。如在匯編源程序編寫階段中,技術(shù)人員可以使用IMPORT偽操作,調(diào)用C#語言風(fēng)格的字符串。在執(zhí)行階段中,該操作可以定義字符串,告訴編譯器引用符號存在于其他源文件中,在該文本文件中不存在引用符號。在使用IMPORT偽操作時,技術(shù)人員應(yīng)按照其IMPORTsymbol[,WEAK]的要求,按照格式要求指示編譯器。在程序執(zhí)行階段,如果發(fā)現(xiàn)硬件程序中symbol沒有在源文件中找到,就不會導(dǎo)致錯誤信息出現(xiàn)。一般情況下,當(dāng)匯編語言程序中需要采用較多的C#語言程序段時,為了實(shí)現(xiàn)兩類語言的混合編程,可以采取直接調(diào)用C#語言子程序的方法,在保留匯編語言直接讀取各種進(jìn)制的數(shù)據(jù)基礎(chǔ)上,高效有序地進(jìn)行編程工作。此種混合編程方式能夠確保不同編程語言的指令段順利編譯,在匯編語言的編譯環(huán)境中進(jìn)行編寫,需要C#語言程序增添相應(yīng)的格式規(guī)范。一方面,在匯編主程序中,為了將C#語言子程序的調(diào)用說明為外部函數(shù),需要將“EXTERN”標(biāo)識加注在C#語言子程序之前。另一方面,為了確保C#語言子程序的最后一位參與最先壓入當(dāng)前任務(wù)的堆棧中,在設(shè)置C#語言程序的參數(shù)順序時,應(yīng)倒置原有的標(biāo)準(zhǔn)參數(shù)順序;另外,為了提升程序運(yùn)行效率,可以使用CALL語句來調(diào)用C#語言子程序。具體形式,如圖2所示。
2.3C#語言程序設(shè)計嵌入?yún)R編語言程序
為了實(shí)現(xiàn)兩者之間的合理搭配,技術(shù)人員應(yīng)將C#語言作為匯編語言的子程序模塊,通過不斷提升自身的能力,不斷改進(jìn)現(xiàn)有軟件編程技術(shù)。在程序設(shè)計環(huán)節(jié),為了強(qiáng)化當(dāng)前軟件設(shè)計工作質(zhì)量,技術(shù)人員應(yīng)增強(qiáng)匯編子程序設(shè)計能力。將匯編代碼嵌入C#語言中時,技術(shù)人員可以在C#語言程序中采用添加代碼的形式,如#pragmaASM、;AssemblerCodeHere、#pragmaENDASM等。并且在后續(xù)窗口中,技術(shù)人員應(yīng)選擇正確的編譯模式,選擇“Optionsfor…”。為了檢查該框的顏色變化,還應(yīng)點(diǎn)擊右邊的“GenerateAssemblerSRCFile”和“AssembleSRCFile”,選擇正確的編譯模式,在該工程中添加相應(yīng)的庫文件。在日常程序設(shè)計環(huán)節(jié),為了完成整體軟件設(shè)計工作,技術(shù)人員應(yīng)不斷改進(jìn)當(dāng)前程序設(shè)計,重視程序使用階段存在的不足,才能不斷調(diào)用匯編程序代碼設(shè)計。同時,為了調(diào)用當(dāng)前硬件資源,技術(shù)人員應(yīng)利用匯編語言的優(yōu)勢,將C#語言程序嵌入到匯編語言程序中。
3C#與匯編語言連接的關(guān)鍵問題
C#與匯編語言混合編程需要注意以下幾個問題:
3.1參數(shù)傳遞
由于C#與匯編語言參數(shù)不同,一般情況在共同使用的過程中,需要運(yùn)用堆棧的方法,對參數(shù)進(jìn)行調(diào)節(jié),才能傳遞參數(shù)。在匯編語言中,運(yùn)用BP寄存地址,在程序調(diào)用之前,為了實(shí)現(xiàn)不同偏移量的整合操作,應(yīng)在堆棧中放入C#語言的參數(shù),并且為了實(shí)現(xiàn)在不同偏移量中依次存取堆棧中的數(shù)據(jù),可以運(yùn)用BP,將C#語言的參數(shù)放入到堆棧中。另外,在混合語言編程階段,由于兩種語言之間存在一定差異性,技術(shù)人員應(yīng)高度重視參數(shù)傳遞問題,并且為了完成參數(shù)的傳遞,應(yīng)充分利用合適的堆棧。在操作環(huán)節(jié)中,技術(shù)人員使用更為細(xì)致的參數(shù)調(diào)用工作,將BP基址作為現(xiàn)階段數(shù)據(jù)的存儲器,來存儲相關(guān)參數(shù);為了確保C#語言與匯編語言能夠正常發(fā)揮自身作用,在程序設(shè)計階段,在對函數(shù)返回值的分析上,相關(guān)人員應(yīng)逐步提升軟件設(shè)計工作質(zhì)量,制定更為細(xì)致的軟件設(shè)計方案和應(yīng)對措施。
3.2調(diào)用關(guān)系的確定
應(yīng)實(shí)現(xiàn)說明和建立將要涉及到調(diào)用的過程或函數(shù)的調(diào)用和被調(diào)用關(guān)系。為了方便被外部模塊引用,應(yīng)預(yù)先說明為外部類型,而在程序中,調(diào)用程序也需要說明將引用的外部模塊名稱。并且,還需要根據(jù)不同的存儲模式,確定相應(yīng)的匯編語言格式、說明調(diào)用關(guān)系。C#程序大模式對應(yīng)匯編程序的遠(yuǎn)類型過程,C#程序小模式對應(yīng)匯編程序的近類型過程,按照不同的儲存方式分析調(diào)用關(guān)系。
3.3匯編語言和C#語言模塊的結(jié)合
匯編模塊中,應(yīng)遵守兼容的命名約定使用C#模塊一致的存儲模式、匯編模塊中的函數(shù)和變量命名等約定,只有這樣,才能確保C#和匯編語言模塊文件的正確連接。C#語言6種不同存儲模式,即微模式Tiny、小模式Small、中模式Medium、大模式Large、巨模式Huge、緊湊模式Compact等。其中小模式由一個數(shù)據(jù)段和一個代碼段,在同一段內(nèi)存在微模式的程序、數(shù)據(jù)、堆棧。在匯編語言中,存儲模式用偽指令.Model***表示,在這6種模式中,***是其中的一種。如果在匯編語言中,C#采用了小模式是可以使用的,小模式的程序運(yùn)行效率高,Model和Small偽指令的存儲模式是一致的,所有指針都是Near型指針。因此,一般情況下,混合編程都采用小模式。在對C#源程序編譯時,編譯系統(tǒng)會將劃線加在變量名、函數(shù)名前面。在被C#語言調(diào)用的匯編子程序中,要在所有標(biāo)識符下加上下劃線,才能確保連接后的程序保持一致性。在C#語言中,一般情況下,在各函數(shù)外部放入說明匯編程序中的函數(shù)、變量可以用EXTERN偽命令。同時,在C#語言中,匯編語言的定義必須要用PUBLIC操作符來定義,并且在匯編語言中使用C#語言的函數(shù)和變量時,應(yīng)在函數(shù)和變量名前面加上下劃線,用EXTERN對匯編程序開始部分的調(diào)用C#函數(shù)和變量進(jìn)行說明。
4結(jié)語
C#與混編語言混編的特點(diǎn)顯著,在計算機(jī)程序設(shè)計中,具有非常重要的應(yīng)用價值。因此,當(dāng)前在計算機(jī)程序設(shè)計日常工作中,軟件設(shè)計人員在重視C#與混編語言程序設(shè)計相關(guān)規(guī)范應(yīng)使用合適的工作方案,不斷增強(qiáng)軟件設(shè)計工作效率,才能促進(jìn)兩者在實(shí)際應(yīng)用中的專業(yè)化和效率化。
作者:胡爾西代姆·伊米提 單位:和田師范專科學(xué)校