匯編語言和C語言.docx

匯編語言和C語言.docx

ID:61464259

大?。?7.14 KB

頁數(shù):8頁

時間:2021-02-02

匯編語言和C語言.docx_第1頁
匯編語言和C語言.docx_第2頁
匯編語言和C語言.docx_第3頁
匯編語言和C語言.docx_第4頁
匯編語言和C語言.docx_第5頁
資源描述:

《匯編語言和C語言.docx》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。

1、第12章匯編語言和C語言C/C++語言是一個被廣泛使用的程序設(shè)計語言,它不僅具有良好的高級語言特征,而且還具有一些低級語言的特點,如:寄存器變量、位操作等。所以,C語言的程序與匯編語言程序之間能很平滑地銜接。另外,目前主要的C語言程序開發(fā)環(huán)境,如:TurboC/C++、BorlandC/C++等,也都提供了很好的混合編程手段。本章主要介紹匯編語言和C語言的混合編程和調(diào)用方法。雖然其它高級語言,如:Pascal、Basic等,也可與匯編語言混合使用,但出于其應(yīng)用范圍的考慮,不再對它們進行介紹,感興趣的讀者可參閱有關(guān)技術(shù)資料。12.

2、1匯編指令的嵌入為了提高C語言程序內(nèi)某特殊功能段的處理效率,我們可以在其源程序中嵌入一段匯編語言程序段。這樣做,雖然能達到提高了程序處理效率的目的,但它無疑以喪失源程序的可移植性為代價。所以,當想用C語言和匯編語言混合編程時,程序員需要權(quán)衡采用這種方法的利與弊。在C語言中,嵌入?yún)R編語言的語法如下(*):asm<;ornewline>注意:這里的分號';'不是匯編語言中起注釋作用的分號,而是作為語句的分隔符。若C語言源程序中嵌入一條匯編語句,則可按下列方式來做:asmmovax,data若要嵌入

3、一組匯編語句,則需要用括號'{'和'}'把它們括起來。asm{  mov ax,data1  xchg ax,data2  mov data1,ax     //實現(xiàn)整型變量data1和data2之值的交換}例12.1在C語言源程序中嵌入?yún)R編語言語句實現(xiàn)賦值語句A=A+B+C,其中:A、B、C都是整型變量。解:……asm{pushax      //實現(xiàn)整型變量A=A+B+C?mov ax,A?add ax,B?add ax,C?mov A,ax?pop ax}12.2C語言程序的匯編輸出在TurboC++或BorlandC++

4、編程環(huán)境下,我們可TCC或BCC行命令把一個C語言的源程序轉(zhuǎn)換成匯編語言的源程序。通過閱讀匯編語言程序可以很準確地知道C語言語句的功能是如何實現(xiàn)的,這樣,可為將來學(xué)習(xí)《編譯原理》課程中的"寄存器調(diào)度"和"代碼生成"等相關(guān)知識打下良好的基礎(chǔ)。C語言源程序轉(zhuǎn)換的命令格式如下:TCC-St1.cpp或BCC-St1.cpp   ;假設(shè)其文件名為t1.cpp若命令TCC/BCC不帶參數(shù)的話,則將顯示其使用方法。下面是C語言程序及其相對應(yīng)的匯編語言程序,希望讀者能逐行對照理解它們語句之間的轉(zhuǎn)換關(guān)系,這將能進一步理解高級語言的語句功能。1、

5、C語言程序清單#includeintsum(inta,intb,intc) { return(a+b+c); }voidmain(){inta,b,c;?a=b=12;?c=32;?printf("%d",sum(a,b,c));}2、生成的匯編語言程序清單……                     ;一系列輔助說明信息_TEXT segmentbytepublic'CODE'      ;代碼段的開始;intsum(inta,intb,intc)           ;C語言語句      assume?c

6、s:_TEXT@sum$qiii proc near           ;過程說明,對應(yīng)于C語言sum過程      push bp             ;為讀取堆棧中的參數(shù)作準備,可參見第7.3.3節(jié)內(nèi)容      mov bp,sp;{  ;return(a+b+c);      mov ax,wordptr[bp+4]      add ax,wordptr[bp+6]      add ax,wordptr[bp+8]      jmp short@1@58@1@58:;}      pop bp         

7、     ;sum子程序結(jié)束的代碼      ret@sum$qiii endp;voidmain()      assume?cs:_TEXT_main   proc near           ;過程說明,對應(yīng)于C語言中的主函數(shù)main()      push bp      mov bp,sp      sub sp,6;{inta,b,c;                  ;局部變量是用堆棧來存儲的,請見第7.5.10節(jié);a=b=12;                  ;給局部變量賦值      mov ax,12

8、            ;用給堆棧單元賦值來實現(xiàn)對局部變量的賦值      mov wordptr[bp-4],ax      mov wordptr[bp-2],ax;c=32;      mov wordptr[bp-6],32;printf("%d",su

當前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。