匯編語言 課件 第7章_第1頁
匯編語言 課件 第7章_第2頁
匯編語言 課件 第7章_第3頁
匯編語言 課件 第7章_第4頁
匯編語言 課件 第7章_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第7章高級匯編語言技術(shù)

講授要點(diǎn)宏匯編重復(fù)匯編條件匯編2/3/202380x86匯編語言程序設(shè)計(jì)7.1宏匯編

7.1.1宏定義、宏調(diào)用與宏展開

1.宏定義宏指令名 MACRO[形式參數(shù)表] ... ;宏體 ENDM2.宏調(diào)用宏指令名[實(shí)參數(shù)表]3.宏展開當(dāng)源程序被匯編時(shí),MASM用相應(yīng)的宏體取代每個(gè)宏調(diào)用,并用實(shí)參數(shù)按位置替換宏定義中的形式參數(shù)。2/3/202380x86匯編語言程序設(shè)計(jì)4.說明在參數(shù)的類型與順序應(yīng)與宏定義時(shí)的形式參數(shù)一致。宏展開時(shí),若實(shí)參數(shù)的個(gè)數(shù)多于形式參數(shù),則忽略多余的實(shí)在參數(shù);若實(shí)參數(shù)的個(gè)數(shù)少于形式參數(shù),則多余的形式參數(shù)為空。宏定義只是告訴MASM用一個(gè)名字來表示一段語句序列,其本身不被匯編。宏指令的參數(shù)非常靈活,可以出現(xiàn)在指令的操作數(shù)或操作碼部分,MASM在宏展開時(shí)對參數(shù)進(jìn)行文本替換。宏定義可以寫在程序的任何地方,但習(xí)慣上總是把宏定義寫在程序的最前面。2/3/202380x86匯編語言程序設(shè)計(jì)【例】參照匯編程序的處理方法,對下面程序中的宏進(jìn)行展開。back=4CHdosintEQU21HdispchMACROMOVAH,2MOVDL,'*'INT21HENDM2/3/202380x86匯編語言程序設(shè)計(jì)codeSEGMENTASSUMECS:codemain:dispchdispchMOV AH,backINT dosintcodeENDSEND main2/3/202380x86匯編語言程序設(shè)計(jì)【解】宏展開后的結(jié)果是:+MOV AH,2+MOV DL,'*'+I(xiàn)NT 21H+MOV AH,2+MOV DL,'*'+I(xiàn)NT 21HMOV AH,4CHINT 21H2/3/202380x86匯編語言程序設(shè)計(jì)7.1.2與宏有關(guān)的偽指令

1.LOCAL偽指令—用來指定宏內(nèi)局部符號 LOCAL 符號名,...,符號名作用:在宏展開時(shí),MASM將源文件中的所有局部符號統(tǒng)一按出現(xiàn)次序替換為唯一的標(biāo)識符(??0000~??FFFF),以避免符號的重復(fù)定義。

2.EXITM偽指令

用來立即終止宏展開,通常與條件匯編結(jié)合使用。MASM忽略EXITM與ENDM之間的所有語句。

2/3/202380x86匯編語言程序設(shè)計(jì)【例7.16】設(shè)有如下宏定義:sumMACROa,bLOCALnextMOVCX,aLEABX,bXORAX,AXnext:ADDAX,[BX]ADDBX,2LOOPnextENDM并已知buf1和buf2是已定義的兩個(gè)變量,展開下面的宏調(diào)用:sum5,buf1sum7,buf22/3/202380x86匯編語言程序設(shè)計(jì)【解】宏展開結(jié)果是:+MOVCX,5+LEABX,buf1+XORAX,AX+??0000:ADDAX,[BX]+ADDBX,2+LOOP??0000+MOVCX,7+LEABX,buf2+XORAX,AX+??0001:ADDAX,[BX]+ADDBX,2+LOOP??00012/3/202380x86匯編語言程序設(shè)計(jì)7.1.3宏操作符

1.<>

在宏調(diào)用時(shí),當(dāng)實(shí)參數(shù)包含空格或逗號等間隔符時(shí),必須使用"<"和">"作為參數(shù)的定界符。2.&

在宏定義時(shí),當(dāng)形式參數(shù)作為標(biāo)識符或字符串的一部分時(shí),必須使用&作為分隔符。3.%

當(dāng)宏調(diào)用時(shí),若在實(shí)參數(shù)中使用%,則MASM將%后常數(shù)表達(dá)式的值作為參數(shù),而非表達(dá)式本身。2/3/202380x86匯編語言程序設(shè)計(jì)4.!對于包含在<和>之間的文本串,MASM將出現(xiàn)在!之后的特殊字符(<、>、%、"、'和逗號)作為普通字符處理。若將!作為普通字符,則使用?。?。!不適用于包含在引號中的字符串。5.;;在宏定義中,以;;開始的宏注釋,在宏展開時(shí)被忽略。

2/3/202380x86匯編語言程序設(shè)計(jì)【例】設(shè)有宏定義如下:dataMACROp,qv&pDBqENDM以及下面的宏調(diào)用:x=1data%x,%xx=x+1data%x,%x其宏展開結(jié)果是:1v1DB11v2DB22/3/202380x86匯編語言程序設(shè)計(jì)7.1.3宏的嵌套定義【例】設(shè)某程序中已定義了3個(gè)字型變量v1、v2、v3,下面是源程序中的一段,試展開最后一行的宏調(diào)用。mm1 MACROx MOVAX,x MULAX ENDM2/3/202380x86匯編語言程序設(shè)計(jì)mm2MACROa,b,cmm1aMOVBX,AXmm1bADDAX,BXMOVc,AXENDM調(diào)用:mm2v1,v2,v32/3/202380x86匯編語言程序設(shè)計(jì)【解】展開mm2后得到:1mm1v11MOVBX,AX1mm1v21ADDAX,BX1MOVv3,AX其中還含有宏調(diào)用,再把兩個(gè)mm1展開后可得到如下結(jié)果: 2MOVAX,v1 2MULAX 1MOVBX,AX 2MOVAX,v2 2MULAX 1ADDAX,BX 1MOVv3,AX2/3/202380x86匯編語言程序設(shè)計(jì)7.2.4宏指令與過程的區(qū)別

在匯編后產(chǎn)生的目標(biāo)文件中,過程定義依然存在,而宏定義卻不復(fù)存在。過程調(diào)用是在執(zhí)行時(shí)通過CALL指令完成的,而宏調(diào)用是在匯編時(shí)進(jìn)行宏展開,被相應(yīng)宏體所取代。將多次調(diào)用的一段代碼定義為宏指令,與使用過程相比,其執(zhí)行速度要快(因?yàn)檫^程需要調(diào)用和返回),但目標(biāo)代碼長。宏指令的參數(shù)是在匯編時(shí)進(jìn)行形實(shí)替換的,而過程的參數(shù)是在執(zhí)行時(shí)通過寄存器或堆棧等方式傳遞的。

2/3/202380x86匯編語言程序設(shè)計(jì)7.2重匯編

7.2.1重復(fù)偽操作1.格式

REPT 數(shù)值表達(dá)式 ... ;重復(fù)體ENDM2.功能

以數(shù)值表達(dá)式表示的無符號值作為重復(fù)次數(shù),連續(xù)匯編重復(fù)體中的語句。2/3/202380x86匯編語言程序設(shè)計(jì)【例】前面提到的把1到10的整數(shù)作為字節(jié)型變量的初值可以用下面的方式編寫:x=1REPT10DBxx=x+1ENDM匯編后產(chǎn)生的結(jié)果如下:1DB11DB2……1DB91DB102/3/202380x86匯編語言程序設(shè)計(jì)7.2.2不定重復(fù)偽操作

IRP偽操作1.格式

IRP參數(shù)名,<參數(shù)值,...,參數(shù)值> ... ;重復(fù)體ENDM2.功能

為<>內(nèi)的每一項(xiàng)重復(fù)一次,每次用相應(yīng)的參數(shù)值取代參數(shù)名。3.實(shí)例2/3/202380x86匯編語言程序設(shè)計(jì)【例7.19】把除SP以外的各通用寄存器入棧需要7條PUSH指令,如果用重復(fù)匯編可以寫成:IRPregs,<AX,BX,CX,DX,SI,DI,BP>PUSHregsENDM匯編后展開的結(jié)果是:1PUSHAX1PUSHBX1PUSHCX1PUSHDX1PUSHSI1PUSHDI1PUSHBP2/3/202380x86匯編語言程序設(shè)計(jì)IRPC偽操作1.格式IRPC 參數(shù)名,<字符串> ;包含字符串的<>可以省略 ... ;重復(fù)體ENDM2.功能

與IRP不同的是,其重復(fù)次數(shù)由字符串的長度決定,每次以相應(yīng)字符取代參數(shù)名。

2/3/202380x86匯編語言程序設(shè)計(jì)重復(fù)塊可以用在宏定義體內(nèi),也可單獨(dú)使用。重復(fù)塊沒有名字,不能被調(diào)用。與宏指令不同的是,重復(fù)塊未將定義與調(diào)用分離。在匯編時(shí),MASM展開遇到的每個(gè)重復(fù)塊。若希望產(chǎn)生可調(diào)用的重復(fù)塊,則可放在宏定義內(nèi)。重復(fù)塊是在匯編時(shí)處理的。2/3/202380x86匯編語言程序設(shè)計(jì)7.3條件匯編

條件匯編的作用:根據(jù)指定條件來確定是否匯編某些代碼,以便在不同操作環(huán)境下生成不同的目標(biāo)代碼。條件匯編類似于高級語言的條件編譯。條件匯編語句的一般形式如下:

IFxx

表達(dá)式 <語句序列1> [ELSE <語句序列2>]

ENDIF2/3/202380x86匯編語言程序設(shè)計(jì)較常用的條件匯編語句:IF、IFDEF

使用條件匯編的場合與實(shí)例:在不同CPU下匯編不同代碼。在程序中插入調(diào)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論