版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、任向民 王克朝 王喜德 馮阿芳 編著高級匯編語言程序設(shè)計(jì)高級匯編語言程序設(shè)計(jì)實(shí)用教程(第實(shí)用教程(第2 2版)版)清華大學(xué)出版社高等院校信息技術(shù)規(guī)劃教材第第7章章匯編語言與高級語言接口匯編語言與高級語言接口 7.1混合編程混合編程7.2 C/C+的嵌入式匯編的嵌入式匯編7.2.1在在C/C+程序中嵌入?yún)R編語句程序中嵌入?yún)R編語句7.2.2在嵌入式匯編中訪問在嵌入式匯編中訪問C/C+的數(shù)據(jù)的數(shù)據(jù)7.2.3匯編語言程序段編寫匯編語言程序段編寫C函數(shù)函數(shù)7.2.4匯編程序調(diào)用匯編程序調(diào)用C/C+函數(shù)函數(shù)7.3 用用C/C+調(diào)用匯編調(diào)用匯編7.3.1接口接口7.3.2調(diào)用匯編模塊調(diào)用匯編模塊7.1 混合
2、編程混合編程一般說來高級語言具有豐富的數(shù)據(jù)結(jié)構(gòu)、種類繁一般說來高級語言具有豐富的數(shù)據(jù)結(jié)構(gòu)、種類繁多的運(yùn)算符、豐富的函數(shù)、易讀易寫、可移植性多的運(yùn)算符、豐富的函數(shù)、易讀易寫、可移植性好等特點(diǎn),但用高級語言編寫的程序,代碼較長,好等特點(diǎn),但用高級語言編寫的程序,代碼較長,占有存儲(chǔ)空間大,運(yùn)行速度慢。占有存儲(chǔ)空間大,運(yùn)行速度慢。而用匯編語言編寫的程序所占內(nèi)存空間小,而用匯編語言編寫的程序所占內(nèi)存空間小,執(zhí)行速度快,有直接控制硬件的能力,但程序繁執(zhí)行速度快,有直接控制硬件的能力,但程序繁瑣,難讀也難編寫,且必須熟悉計(jì)算機(jī)的內(nèi)部結(jié)瑣,難讀也難編寫,且必須熟悉計(jì)算機(jī)的內(nèi)部結(jié)構(gòu)及其有關(guān)硬件知識(shí)。構(gòu)及其有關(guān)硬
3、件知識(shí)。7.1 混合編程混合編程混合編程即由高級語言來調(diào)用或嵌入?yún)R編語言子程序,或用匯混合編程即由高級語言來調(diào)用或嵌入?yún)R編語言子程序,或用匯編語言調(diào)用或嵌入高級語言子程序。編語言調(diào)用或嵌入高級語言子程序。匯編程序常以過程的形式同高級語言(如匯編程序常以過程的形式同高級語言(如C/C+、Basic、Pascal、Delphi等)一起使用。等)一起使用。在與高級語言接口時(shí),匯編器使用兩種調(diào)用協(xié)議用于在與高級語言接口時(shí),匯編器使用兩種調(diào)用協(xié)議用于C/C+語語言的言的C/C+調(diào)用協(xié)議和用于調(diào)用協(xié)議和用于Basic、Pascal和和Fortran語言的語言的Pascal語言調(diào)用協(xié)議。調(diào)用協(xié)議語言在語言調(diào)
4、用協(xié)議。調(diào)用協(xié)議語言在MODEL語句中或與語句中或與PROC語句相聯(lián)系的語句相聯(lián)系的OPTION指示符中指定。除了用這些語句指示符中指定。除了用這些語句以外還可以用完全段定義指定。以外還可以用完全段定義指定。 7.1 混合編程混合編程高級語言和匯編語言連接很容易,因?yàn)樵诟呒壵Z高級語言和匯編語言連接很容易,因?yàn)樵诟呒壵Z言編譯后生成的編譯程序是一個(gè)言編譯后生成的編譯程序是一個(gè).OBJ的文件,這與的文件,這與匯編程序輸出的目標(biāo)文件一樣都是機(jī)器語言程序。那匯編程序輸出的目標(biāo)文件一樣都是機(jī)器語言程序。那么我們就可以利用么我們就可以利用link將高級語言程序產(chǎn)生的將高級語言程序產(chǎn)生的.OBJ程程序與匯編程
5、序產(chǎn)生的序與匯編程序產(chǎn)生的.OBJ程序連接起來,形成一程序連接起來,形成一個(gè)個(gè).EXE的可執(zhí)行文件。的可執(zhí)行文件。7.1 混合編程混合編程高級語言與匯編語言的連接應(yīng)注意下面幾個(gè)問題:高級語言與匯編語言的連接應(yīng)注意下面幾個(gè)問題:1兩種語言之間的控制傳輸問題兩種語言之間的控制傳輸問題一般來說匯編語言程序作為高級語言的外部子程序,由高級語言通過函數(shù)一般來說匯編語言程序作為高級語言的外部子程序,由高級語言通過函數(shù)或者過程進(jìn)行調(diào)用匯編語言程序?;蛘哌^程進(jìn)行調(diào)用匯編語言程序。2參數(shù)的傳遞參數(shù)的傳遞通常高級語言程序使用系統(tǒng)堆棧向匯編語言傳遞入口參數(shù),匯編語言程序通常高級語言程序使用系統(tǒng)堆棧向匯編語言傳遞入口
6、參數(shù),匯編語言程序返回時(shí)使用返回時(shí)使用CPU內(nèi)部寄存器帶回計(jì)算結(jié)果。此外還需要確定哪些寄存器是內(nèi)部寄存器帶回計(jì)算結(jié)果。此外還需要確定哪些寄存器是需要保留下來的,哪些是可以使用的。需要保留下來的,哪些是可以使用的。7.1 混合編程混合編程3存儲(chǔ)分配問題存儲(chǔ)分配問題高級語言不需要考慮存儲(chǔ)分配問題,編譯程序和連接程序會(huì)自動(dòng)的進(jìn)行存高級語言不需要考慮存儲(chǔ)分配問題,編譯程序和連接程序會(huì)自動(dòng)的進(jìn)行存儲(chǔ)分配。當(dāng)匯編語言與高級語言程序連接時(shí),就需要考慮這個(gè)問題了。這儲(chǔ)分配。當(dāng)匯編語言與高級語言程序連接時(shí),就需要考慮這個(gè)問題了。這個(gè)問題處理起來不是很復(fù)雜,一般是將匯編語言作為一個(gè)程序模塊,由連個(gè)問題處理起來不是
7、很復(fù)雜,一般是將匯編語言作為一個(gè)程序模塊,由連接程序決定其在存儲(chǔ)器中的位置。接程序決定其在存儲(chǔ)器中的位置。不同的高級語言與匯編語言的混合編程所采用的方法是不相同的。本章當(dāng)不同的高級語言與匯編語言的混合編程所采用的方法是不相同的。本章當(dāng)中主要介紹中主要介紹C/C+與匯編的混合編程問題,在下面的幾節(jié)當(dāng)中,我們將分與匯編的混合編程問題,在下面的幾節(jié)當(dāng)中,我們將分別介紹別介紹C/C+的嵌入式匯編、的嵌入式匯編、C/C+調(diào)用匯編的具體方法。調(diào)用匯編的具體方法。7.2 C/C+的嵌入式匯編的嵌入式匯編7.2.1在在C/C+程序中嵌入?yún)R編語句程序中嵌入?yún)R編語句7.2.2在嵌入式匯編中訪問在嵌入式匯編中訪問C
8、/C+的數(shù)據(jù)的數(shù)據(jù)7.2.3匯編語言程序段編寫匯編語言程序段編寫C函數(shù)函數(shù)7.2.4匯編程序調(diào)用匯編程序調(diào)用C/C+函數(shù)函數(shù)7.2 C/C+的嵌入式匯編的嵌入式匯編利用匯編語言程序設(shè)計(jì)的一種非常常見的方式是利用匯編語言程序設(shè)計(jì)的一種非常常見的方式是在高級語言在高級語言(例如例如C/C+)程序內(nèi)編寫匯編函數(shù)。完成程序內(nèi)編寫匯編函數(shù)。完成這一工作有幾種不同的方式把匯編語言函數(shù)直接放到這一工作有幾種不同的方式把匯編語言函數(shù)直接放到C/C+語言程序內(nèi)。這種技術(shù)稱為嵌入式匯編或內(nèi)聯(lián)語言程序內(nèi)。這種技術(shù)稱為嵌入式匯編或內(nèi)聯(lián)匯編(匯編(Inline Assembly)。)。7.2 C/C+的嵌入式匯編的嵌入
9、式匯編在在C/C+與匯編語言的混合編程過程中,與匯編語言的混合編程過程中,C/C+調(diào)用匯編調(diào)用匯編代碼常有兩種方法:代碼常有兩種方法: (一一)直接在直接在C/C+程序中嵌入?yún)R編語句程序中嵌入?yún)R編語句(二二)C/C+調(diào)用匯編語言子程序調(diào)用匯編語言子程序把匯編語言程序加入到把匯編語言程序加入到C/C+程序中,必須使匯編程序和程序中,必須使匯編程序和C/C+程序一樣具有明確的邊界、參數(shù)、返回值和局部變程序一樣具有明確的邊界、參數(shù)、返回值和局部變量,必須為匯編語言編寫的程序段指定段名并進(jìn)行定義,量,必須為匯編語言編寫的程序段指定段名并進(jìn)行定義,如果要在它們之間傳遞參數(shù),則必須保證匯編程序用來傳如果要
10、在它們之間傳遞參數(shù),則必須保證匯編程序用來傳遞參數(shù)的存儲(chǔ)區(qū)和遞參數(shù)的存儲(chǔ)區(qū)和C/C+函數(shù)使用的存儲(chǔ)區(qū)是一樣的。函數(shù)使用的存儲(chǔ)區(qū)是一樣的。7.2 C/C+的嵌入式匯編的嵌入式匯編在在C/C+程序中采用程序中采用“_ASM”關(guān)鍵字輸入?yún)R編語言指令語句或關(guān)鍵字輸入?yún)R編語言指令語句或語句段。在語句段。在C或者或者C+中進(jìn)行嵌入式匯編需要注意以下要點(diǎn):中進(jìn)行嵌入式匯編需要注意以下要點(diǎn):(1)嵌入式匯編語言代碼支持嵌入式匯編語言代碼支持INTEL 80 x86 CPU的全部的全部32位指位指令系統(tǒng),但是不能使用偽指令與宏指令語句,也不能使用結(jié)構(gòu)令系統(tǒng),但是不能使用偽指令與宏指令語句,也不能使用結(jié)構(gòu)(STR
11、UCT)和記錄()和記錄(RECORD)(2)嵌入式匯編語言可以使用嵌入式匯編語言可以使用C+程序中標(biāo)識(shí)符,包括標(biāo)號、變程序中標(biāo)識(shí)符,包括標(biāo)號、變量、函數(shù)名、常量、宏、類型名、結(jié)構(gòu)和聯(lián)合的成員以及類對量、函數(shù)名、常量、宏、類型名、結(jié)構(gòu)和聯(lián)合的成員以及類對象的公有(象的公有(PUBLIC)成員變量等;)成員變量等;7.2 C/C+的嵌入式匯編的嵌入式匯編(3)嵌入式匯編語言代碼中可以使用匯編語言格式的常數(shù)嵌入式匯編語言代碼中可以使用匯編語言格式的常數(shù)(131AH),也可以使用),也可以使用C+格式的常數(shù)(格式的常數(shù)(0X131A)(4)嵌入式匯編語言不能使用嵌入式匯編語言不能使用C+語言的運(yùn)算符
12、語言的運(yùn)算符(5)嵌入式匯編語言代碼中的轉(zhuǎn)移指令和嵌入式匯編語言代碼中的轉(zhuǎn)移指令和C+中的中的GOTO語句都語句都能跳轉(zhuǎn)到匯編語言或者能跳轉(zhuǎn)到匯編語言或者C+定義的標(biāo)號定義的標(biāo)號(6)嵌入式匯編語言定義的函數(shù)返回值的傳遞方法與預(yù)模塊調(diào)嵌入式匯編語言定義的函數(shù)返回值的傳遞方法與預(yù)模塊調(diào)用匯編中匯編語言程序返回值的傳遞方法相同,在用匯編中匯編語言程序返回值的傳遞方法相同,在C+程序編程序編譯時(shí)會(huì)產(chǎn)生譯時(shí)會(huì)產(chǎn)生“NO RETURN VALUE”警告,可以使用警告,可以使用#PRAGMA WARNING(DISABLE:4035)預(yù)編譯語句禁止該預(yù)編譯語句禁止該警告警告7.2.1 在在C/C+程序中嵌
13、入?yún)R編語句程序中嵌入?yún)R編語句嵌入?yún)R編語言指令采用嵌入?yún)R編語言指令采用_ASM 關(guān)鍵字,嵌入?yún)R編格式,具體應(yīng)用通常采用關(guān)鍵字,嵌入?yún)R編格式,具體應(yīng)用通常采用兩種方式。兩種方式。第一種方式,嵌入?yún)R編語言指令是在匯編語句前加一個(gè)第一種方式,嵌入?yún)R編語言指令是在匯編語句前加一個(gè)_ASM關(guān)鍵字,格關(guān)鍵字,格式如下:式如下: _ASM 操作碼操作碼 操作數(shù)操作數(shù) 其中,操作碼是處理器指令或若干偽指令;操作數(shù)是操作碼可接受的數(shù)據(jù)。其中,操作碼是處理器指令或若干偽指令;操作數(shù)是操作碼可接受的數(shù)據(jù)。內(nèi)嵌的匯編語句可以用分號內(nèi)嵌的匯編語句可以用分號“;”結(jié)束,也可以用換行符結(jié)束;一行中可以結(jié)束,也可以用換行符結(jié)束
14、;一行中可以有多個(gè)匯編語句,相互間用分號分隔,但不能跨行書寫。嵌入?yún)R編語句的有多個(gè)匯編語句,相互間用分號分隔,但不能跨行書寫。嵌入?yún)R編語句的分號不是注釋的開始;要對語句注釋,應(yīng)使用分號不是注釋的開始;要對語句注釋,應(yīng)使用C的注釋,如的注釋,如 / * * /。例如:。例如:_ASM MOV AX,DS; /* AXDS */_ASM POP AX; ASM POP DS; ASM RET; /* 合法語句合法語句 */_ASM PUSH DS /* ASM語句是語句是C/C+程序中惟一可以用換行結(jié)尾的語句程序中惟一可以用換行結(jié)尾的語句 */7.2.1 在在C/C+程序中嵌入?yún)R編語句程序中嵌入?yún)R
15、編語句在在C/C+程序的函數(shù)內(nèi)部,每條匯編語言語句都是一條可執(zhí)行語句,它被編譯進(jìn)程程序的函數(shù)內(nèi)部,每條匯編語言語句都是一條可執(zhí)行語句,它被編譯進(jìn)程序的代碼段。在函數(shù)外部,一條匯編語句是一個(gè)外部說明,它在編譯時(shí)被放在程序序的代碼段。在函數(shù)外部,一條匯編語句是一個(gè)外部說明,它在編譯時(shí)被放在程序的數(shù)據(jù)段中;這些外部數(shù)據(jù)可被其他程序引用。例如:的數(shù)據(jù)段中;這些外部數(shù)據(jù)可被其他程序引用。例如:_ASM ERRMSG DB SYSTEM ERROR_ASM NUM DW 0FFFFH_ASM PI DD 3.1415926_ASM段可以放在段可以放在C/C+語言程序段中的任何位置上。語言程序段中的任何位置
16、上。_ASM 匯編語句:匯編語句:_ASM MOV AX, 15H_ASM MOV CX, 9H_ASM ADD AX, CX7.2.1 在在C/C+程序中嵌入?yún)R編語句程序中嵌入?yún)R編語句下面這個(gè)小程序就是一個(gè)實(shí)際的調(diào)用匯編的例子:下面這個(gè)小程序就是一個(gè)實(shí)際的調(diào)用匯編的例子:#INCLUDEINT MAIN()INT A=10;INT B=20;INT RESULT;RESULT=A*B;_ASM NOP;PRINTF(THE RESULT IS,RESULT);RETURN 0;7.2.1 在在C/C+程序中嵌入?yún)R編語句程序中嵌入?yún)R編語句在這個(gè)程序當(dāng)中,在這個(gè)程序當(dāng)中,_ASM NOP不執(zhí)行任
17、何任務(wù),是一個(gè)空操作?;镜那度?yún)R編不執(zhí)行任何任務(wù),是一個(gè)空操作?;镜那度?yún)R編代碼可以利用應(yīng)用程序中定義的全局代碼可以利用應(yīng)用程序中定義的全局C變量。這里要注意的是只有全局定義的變量變量。這里要注意的是只有全局定義的變量才能在基本的內(nèi)聯(lián)匯編代碼內(nèi)使用。通過才能在基本的內(nèi)聯(lián)匯編代碼內(nèi)使用。通過C/C+程序中使用的相同名稱引用這種變程序中使用的相同名稱引用這種變量。量。第二種方式,第二種方式,_ASM匯編程序段匯編程序段采用花括號的匯編語言程序段形式。采用花括號的匯編語言程序段形式。_ASM 匯編程序段匯編程序段如下所示:如下所示:_ASM MOV AX, 15HMOV CX, 9HADD AX
18、, CX7.2.1 在在C/C+程序中嵌入?yún)R編語句程序中嵌入?yún)R編語句包含在括號中的匯編代碼必須按照特定的格式:包含在括號中的匯編代碼必須按照特定的格式:(1)指令必須括在引號里。指令必須括在引號里。(2)如果包含的指令超過一條,那么必須使用新行字符分隔匯如果包含的指令超過一條,那么必須使用新行字符分隔匯編語言代碼的每一行。通常,還包含制表符幫助縮進(jìn)匯編語言編語言代碼的每一行。通常,還包含制表符幫助縮進(jìn)匯編語言代碼,使代碼行更容易閱讀。代碼,使代碼行更容易閱讀。(規(guī)則規(guī)則2)是因?yàn)榫幾g器逐字地取得)是因?yàn)榫幾g器逐字地取得ASM段中的匯編代碼,并且段中的匯編代碼,并且把它們放在為程序生成的匯編代碼
19、中。把它們放在為程序生成的匯編代碼中。7.2.1 在在C/C+程序中嵌入?yún)R編語句程序中嵌入?yún)R編語句下面通過幾個(gè)例子來具體的了解下嵌入式匯編的過程。下面通過幾個(gè)例子來具體的了解下嵌入式匯編的過程?!纠纠?-1】顯示】顯示1到到1000中任一個(gè)數(shù)的二進(jìn)制到十六進(jìn)制數(shù)。中任一個(gè)數(shù)的二進(jìn)制到十六進(jìn)制數(shù)。#includeCHAR * BUFFER= Enter A Number Between 0 To 1000:;CHAR * BUFFER1= BASE;INT B=0;CHAR A;/*顯示字符的匯編程序段顯示字符的匯編程序段*/7.2.1 在在C/C+程序中嵌入?yún)R編語句程序中嵌入?yún)R編語句VOID
20、 DISPS(INT BASE, INT DATA)INT TEMP;_ASM MOV AX,DATAMOV BX,BASEPUSH BXTOP1:MOVEDEX,0DIVBXPUSHDXCMPAX,0JNZTOP1TOP2:POPDXCMPDX, BXJETOP4ADDDX, 30HCMPDX, 39HJBETOP3ADDDX, 7TOP3:MOVTEMP, EXCOUT (CHAR) TEMP;_ASMJMP TOP27.2.1 在在C/C+程序中嵌入?yún)R編語句程序中嵌入?yún)R編語句/*C+的主函數(shù)段的主函數(shù)段*/TOP4:VOIDMAIN(VOID)INTI;COUT=0 & A=9)
21、_ASMSUBA,30HB=B*10+A;CINGET(A);FOR(I=2; I17;I+)COUT BUFFER1;DISPS (10, I) ;/*調(diào)用匯編函調(diào)用匯編函數(shù),進(jìn)行顯示數(shù),進(jìn)行顯示*/COUT (CHAR) (0X20) ; DISPS ( I, B) ;/*調(diào)用匯編函調(diào)用匯編函數(shù),進(jìn)行顯示數(shù),進(jìn)行顯示*/COUT (CHAR) (10) ;COUT(CHAR) (13) ;7.2.1 在在C/C+程序中嵌入?yún)R編語句程序中嵌入?yún)R編語句在在Microsoft VC+ 6.0 環(huán)境下編寫匯編與環(huán)境下編寫匯編與C/C+混合程序時(shí),混合程序時(shí),只能編寫只能編寫32 位應(yīng)用程序,而不能
22、編寫位應(yīng)用程序,而不能編寫16 位應(yīng)用程序,在位應(yīng)用程序,在32位位應(yīng)用程序的混合編程中應(yīng)注意不能使用應(yīng)用程序的混合編程中應(yīng)注意不能使用DOS 功能調(diào)用功能調(diào)用INT 21H,用它只能編寫,用它只能編寫16位應(yīng)用程序。由于內(nèi)嵌匯編不能使用位應(yīng)用程序。由于內(nèi)嵌匯編不能使用匯編的宏和條件控制偽指令,這時(shí)就需要進(jìn)行單獨(dú)編寫匯編匯編的宏和條件控制偽指令,這時(shí)就需要進(jìn)行單獨(dú)編寫匯編模塊,然后和模塊,然后和C/C+程序連接,這種編程關(guān)鍵要解決的問題是程序連接,這種編程關(guān)鍵要解決的問題是二者的接口和參數(shù)傳遞,參數(shù)傳遞包括值傳遞、指針傳遞等。二者的接口和參數(shù)傳遞,參數(shù)傳遞包括值傳遞、指針傳遞等。7.2.1 在
23、在C/C+程序中嵌入?yún)R編語句程序中嵌入?yún)R編語句在使用嵌入式匯編中要注意的幾個(gè)問題:在使用嵌入式匯編中要注意的幾個(gè)問題:(1)操作碼支持操作碼支持8086/8087指令或若干偽指令:指令或若干偽指令:db/dw/dd和和extern(2)操作數(shù)是操作碼可接受的數(shù)據(jù):立即數(shù)、寄存器名,還可操作數(shù)是操作碼可接受的數(shù)據(jù):立即數(shù)、寄存器名,還可以是以是C/C+程序中的常量、變量和標(biāo)號等程序中的常量、變量和標(biāo)號等(3)內(nèi)嵌的匯編語句可以用分號內(nèi)嵌的匯編語句可以用分號“;”結(jié)束,也可以用換行符結(jié)束結(jié)束,也可以用換行符結(jié)束(4)使用使用C的注釋,如的注釋,如 / * * /(5)正確運(yùn)用通用寄存器、標(biāo)號等正確
24、運(yùn)用通用寄存器、標(biāo)號等7.2.2 在嵌入式匯編中訪問在嵌入式匯編中訪問C/C+的數(shù)據(jù)的數(shù)據(jù)上面講了如何在上面講了如何在C+中使用匯編語言。反之也可以在匯編代碼段中使用設(shè)中使用匯編語言。反之也可以在匯編代碼段中使用設(shè)置置C+的變量及其他元素。內(nèi)嵌的匯編語句除可以使用指令允許的立即數(shù)、的變量及其他元素。內(nèi)嵌的匯編語句除可以使用指令允許的立即數(shù)、寄存器外,還可以使用寄存器外,還可以使用C/C+程序中的任何符號(標(biāo)識(shí)符),包括變量、程序中的任何符號(標(biāo)識(shí)符),包括變量、常量、標(biāo)號、函數(shù)名、寄存器變量、函數(shù)參數(shù)等;常量、標(biāo)號、函數(shù)名、寄存器變量、函數(shù)參數(shù)等;C編譯程序自動(dòng)將它們編譯程序自動(dòng)將它們轉(zhuǎn)換成相
25、應(yīng)匯編語言指令的操作數(shù),并在標(biāo)識(shí)符名前加下劃線。轉(zhuǎn)換成相應(yīng)匯編語言指令的操作數(shù),并在標(biāo)識(shí)符名前加下劃線。一般來說,只要匯編語句能夠使用存儲(chǔ)器操作數(shù)(地址操作數(shù)),就可以一般來說,只要匯編語句能夠使用存儲(chǔ)器操作數(shù)(地址操作數(shù)),就可以采用一個(gè)采用一個(gè)C/C+程序中的符號;同樣,只要匯編語句可以用寄存器作為合程序中的符號;同樣,只要匯編語句可以用寄存器作為合法的操作數(shù),就可以使用一個(gè)寄存器變量。法的操作數(shù),就可以使用一個(gè)寄存器變量。7.2.2 在嵌入式匯編中訪問在嵌入式匯編中訪問C/C+的數(shù)據(jù)的數(shù)據(jù)對于具有內(nèi)嵌匯編語句的對于具有內(nèi)嵌匯編語句的C/C+程序,程序,C編譯器要調(diào)用匯編編譯器要調(diào)用匯編程
26、序進(jìn)行匯編。匯編程序在分析一條嵌入式匯編指令的操程序進(jìn)行匯編。匯編程序在分析一條嵌入式匯編指令的操作數(shù)時(shí),若遇到了一個(gè)標(biāo)識(shí)符,它將在作數(shù)時(shí),若遇到了一個(gè)標(biāo)識(shí)符,它將在C/C+程序的符號表程序的符號表中搜索該標(biāo)識(shí)符;但中搜索該標(biāo)識(shí)符;但8086寄存器名不在搜索范圍之內(nèi),而寄存器名不在搜索范圍之內(nèi),而且大小寫形式的寄存器名都可以使用。且大小寫形式的寄存器名都可以使用。 7.2.2 在嵌入式匯編中訪問在嵌入式匯編中訪問C/C+的數(shù)據(jù)的數(shù)據(jù)【例【例7-2】用嵌入?yún)R編方式實(shí)現(xiàn)取兩數(shù)較小值的函數(shù)】用嵌入?yún)R編方式實(shí)現(xiàn)取兩數(shù)較小值的函數(shù)MIN INT MIN(INT VAR1,INT VAR2) /*用嵌入?yún)R
27、編語句實(shí)現(xiàn)的求較小值用嵌入?yún)R編語句實(shí)現(xiàn)的求較小值 */ ASM MOV AX,VAR1 ASM CMPAX, VAR2 ASM JLE MINEXIT ASM MOV AX,VAR2MINEXIT: RETURN(_AX)/*將寄存器將寄存器AX的內(nèi)容作為函數(shù)的返回值的內(nèi)容作為函數(shù)的返回值*/MAIN() /*C/C+主程序主程序*/MIN (100,200); 7.2.2 在嵌入式匯編中訪問在嵌入式匯編中訪問C/C+的數(shù)據(jù)的數(shù)據(jù)在在_ASM模塊中,可以使模塊中,可以使C+或或ASM的基數(shù)計(jì)數(shù)法,例如的基數(shù)計(jì)數(shù)法,例如0 x100和和100H是是相等的。相等的。_ASM塊中不能使用塊中不能使用“A,則將,則將B 送送AXOK:POP BP ;恢復(fù);恢復(fù)BP 寄存器的內(nèi)容寄存器的內(nèi)容RET_PZD ENDP_TEXT ENDSEND7.3.2 調(diào)用匯編模塊調(diào)用匯編模塊【例【例7-8】定義名為】定義名為ROW01和和COL01的兩個(gè)項(xiàng),并接受由鍵盤輸入這些變量的行的兩個(gè)項(xiàng),并接受由鍵盤輸入這些變量
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 成都職業(yè)技術(shù)學(xué)院《金屬材料數(shù)值模擬基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五年度個(gè)人債務(wù)轉(zhuǎn)讓協(xié)議范本:債務(wù)轉(zhuǎn)讓的合同起草與簽署技巧3篇
- 二零二五年度冷鏈企業(yè)冷庫設(shè)備采購與技術(shù)培訓(xùn)合同2篇
- 2024年廣播行業(yè)發(fā)展監(jiān)測及投資戰(zhàn)略規(guī)劃研究報(bào)告
- 新質(zhì)生產(chǎn)力促進(jìn)高質(zhì)量發(fā)展的路徑設(shè)計(jì)與實(shí)施方案
- 2025版觀光電梯安裝安全責(zé)任協(xié)議書二零二五年度6篇
- 深度解析2024年公務(wù)員錄用規(guī)定
- 2025年度勞動(dòng)合同法在員工薪酬福利體系中的應(yīng)用合同2篇
- 二零二五年度公司設(shè)備租賃與技術(shù)輸出合同3篇
- 2025版新能源汽車電池技術(shù)入股合作協(xié)議3篇
- 手消毒液使用率低品管圈課件
- 偏身舞蹈癥的護(hù)理查房
- 抑郁障礙患者的溝通技巧課件
- 技術(shù)成果轉(zhuǎn)移案例分析報(bào)告
- 護(hù)理人才梯隊(duì)建設(shè)規(guī)劃方案
- 睡眠區(qū)布局設(shè)計(jì)打造舒適宜人的睡眠環(huán)境
- 建筑設(shè)計(jì)行業(yè)項(xiàng)目商業(yè)計(jì)劃書
- 慢性病防治健康教育知識(shí)講座
- 骶尾部藏毛疾病診治中國專家共識(shí)(2023版)
- 【高新技術(shù)企業(yè)所得稅稅務(wù)籌劃探析案例:以科大訊飛為例13000字(論文)】
- 幽門螺旋桿菌
評論
0/150
提交評論