




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第7章高級匯編語言技術(shù)
講授要點(diǎn)宏匯編重復(fù)匯編條件匯編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ù)。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í)慣上總是把宏定義寫在程序的最前面?!纠繀⒄諈R編程序的處理方法,對下面程序中的宏進(jìn)行展開。back=4CHdosintEQU21HdispchMACROMOVAH,2MOVDL,'*'INT21HENDMcodeSEGMENTASSUMECS:codemain:dispchdispchMOV AH,backINT dosintcodeENDSEND main【解】宏展開后的結(jié)果是:+MOV AH,2+MOV DL,'*'+I(xiàn)NT 21H+MOV AH,2+MOV DL,'*'+I(xiàn)NT 21HMOV AH,4CHINT 21H7.1.2與宏有關(guān)的偽指令
1.LOCAL偽指令—用來指定宏內(nèi)局部符號(hào) LOCAL 符號(hào)名,...,符號(hào)名作用:在宏展開時(shí),MASM將源文件中的所有局部符號(hào)統(tǒng)一按出現(xiàn)次序替換為唯一的標(biāo)識(shí)符(??0000~??FFFF),以避免符號(hào)的重復(fù)定義。
2.EXITM偽指令
用來立即終止宏展開,通常與條件匯編結(jié)合使用。MASM忽略EXITM與ENDM之間的所有語句。
【例】設(shè)有如下宏定義:sumMACROa,b
LOCALnextMOVCX,aLEABX,bXORAX,AXnext:ADDAX,[BX]ADDBX,2LOOPnextENDM并已知buf1和buf2是已定義的兩個(gè)變量,展開下面的宏調(diào)用:sum5,buf1sum7,buf2【解】宏展開結(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??00017.1.3宏操作符&7.1.3宏操作符&7.1.3宏操作符<>
在宏調(diào)用時(shí),當(dāng)實(shí)參數(shù)包含空格或逗號(hào)等間隔符時(shí),必須使用"<"和">"作為參數(shù)的定界符。7.1.3宏操作符%
當(dāng)宏調(diào)用時(shí),若在實(shí)參數(shù)中使用%,則MASM將%后常數(shù)表達(dá)式的值作為參數(shù),而非表達(dá)式本身。7.1.3宏操作符!對于包含在<和>之間的文本串,MASM將出現(xiàn)在!之后的特殊字符(<、>、%、"、'和逗號(hào))作為普通字符處理。若將!作為普通字符,則使用??!。!不適用于包含在引號(hào)中的字符串。
7.1.3宏的嵌套定義【例】設(shè)某程序中已定義了3個(gè)字型變量v1、v2、v3,下面是源程序中的一段,試展開最后一行的宏調(diào)用。mm1 MACROx MOVAX,x MULAX ENDMmm2MACROa,b,cmm1aMOVBX,AXmm1bADDAX,BXMOVc,AXENDM調(diào)用:mm2v1,v2,v3【解】展開mm2后得到:1mm1v11MOVBX,AX1mm1v21ADDAX,BX1MOVv3,AX其中還含有宏調(diào)用,再把兩個(gè)mm1展開后可得到如下結(jié)果: 2MOVAX,v1 2MULAX 1MOVBX,AX 2MOVAX,v2 2MULAX 1ADDAX,BX 1MOVv3,AX7.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í)通過寄存器或堆棧等方式傳遞的。
7.2重復(fù)塊
7.2.1REPEAT1.格式
REPT 數(shù)值表達(dá)式 ... ;重復(fù)體ENDM2.功能
以數(shù)值表達(dá)式表示的無符號(hào)值作為重復(fù)次數(shù),連續(xù)匯編重復(fù)體中的語句。7.2.1REPEAT7.2.1REPEAT7.2.2IRP偽操作
1.格式
IRP參數(shù)名,<參數(shù)值,...,參數(shù)值> ... ;重復(fù)體ENDM2.功能
為<>內(nèi)的每一項(xiàng)重復(fù)一次,每次用相應(yīng)的參數(shù)值取代參數(shù)名。例:IRPREG,<BX,CX,DX,SP,BP,SI,DI>ADD
AX,REGENDM把除SP以外的各通用寄存器入棧需要7條PUSH指令,如果用重復(fù)匯編可以寫成:IRPregs,<AX,BX,CX,DX,SI,DI,BP>PUSHregsENDM匯編后展開的結(jié)果是:1PUSHAX1PUSHBX1PUSHCX1PUSHDX1PUSHSI1PUSHDI1PUSHBP7.2.3IRPC偽操作1.格式IRPC 參數(shù)名,<字符串> ;包含字符串的<>可以省略 ... ;重復(fù)體ENDM2.功能
與IRP不同的是,其重復(fù)次數(shù)由字符串的長度決定,每次以相應(yīng)字符取代參數(shù)名。
7.2.4對重復(fù)塊的說明
重復(fù)塊可以用在宏定義體內(nèi),也可單獨(dú)使用。重復(fù)塊沒有名字,不能被調(diào)用。與宏指令不同的是,重復(fù)塊未將定義與調(diào)用分離。在匯編時(shí),MASM展開遇到的每個(gè)重復(fù)塊。若希望產(chǎn)生可調(diào)用的重復(fù)塊,則可放在宏定義內(nèi)。重復(fù)塊是在匯編時(shí)處理的。7.3條件匯編
條件匯編的作用:根據(jù)指定條件來確定是否匯編某些代碼,以便在不同操作環(huán)境下生成不同的目標(biāo)代碼。條件匯編類似于高級語言的條件編譯。條件匯編語句的一般形式如下:
IFxx
表達(dá)式
<語句序列1> [ELSE <語句序列2>] ENDIF條件匯編偽指令是在匯編程序把源程序轉(zhuǎn)換成目標(biāo)程序時(shí)起作用,其一般含義是:若條件匯編偽指令后面的“條件表達(dá)式”為真,那么,語句組1將被匯編;否則,語句組2將被匯編(如果含有ELSE偽指令)。
較常用的條件匯編語句: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)容里面會(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024四川瀘州融通消防職業(yè)技能培訓(xùn)學(xué)校有限公司公開招聘消防技術(shù)人員3人筆試參考題庫附帶答案詳解
- 2024四川九洲投資控股集團(tuán)有限公司招聘數(shù)字化轉(zhuǎn)型(法務(wù))崗等崗位8人筆試參考題庫附帶答案詳解
- Module 2Unit1 教學(xué)設(shè)計(jì) - 2024-2025學(xué)年外研版英語八年級下冊
- 2025年廣西經(jīng)濟(jì)職業(yè)學(xué)院單招職業(yè)技能測試題庫帶答案
- 第2章人工智能技術(shù)基本原理2.3使用決策樹進(jìn)行分類-高中教學(xué)同步《信息技術(shù)人工-智能初步》教學(xué)設(shè)計(jì)(人教-中圖版2019)
- 2025至2030年中國油密封差壓閘閥數(shù)據(jù)監(jiān)測研究報(bào)告
- 第二章 第一節(jié) 一 地球在宇宙中 地球的形狀與大小 地球儀教學(xué)設(shè)計(jì)- 2024-2025學(xué)年湘教版七年級上冊地理
- 2025年合肥信息技術(shù)職業(yè)學(xué)院單招職業(yè)技能測試題庫1套
- 2025至2030年中國橋式三坐標(biāo)測量機(jī)數(shù)據(jù)監(jiān)測研究報(bào)告
- 遼寧省遼東教學(xué)共同體2023-2024學(xué)年高二上學(xué)期期中聯(lián)合考試地理試題(解析版)
- 2022廣州美術(shù)學(xué)院附屬中學(xué)(廣美附中)入學(xué)招生測試卷語文
- 北師大版(2019)選擇性必修第三冊Unit 7 Careers Topic Talk 導(dǎo)學(xué)案
- 春節(jié)復(fù)工復(fù)產(chǎn)安全教育培訓(xùn)
- 2024年廣西公務(wù)員考試行測真題及答案解析
- 護(hù)理質(zhì)量改進(jìn)項(xiàng)目
- 《礦產(chǎn)地質(zhì)勘查規(guī)范 花崗偉晶巖型高純石英原料》(征求意見稿)
- 關(guān)尹子教射課件
- 《合同能源管理介紹》課件
- 養(yǎng)殖駱駝的可行性方案
- 汽車運(yùn)用與維修專業(yè)(新能源方向)調(diào)研報(bào)告
- 2024全國一體化政務(wù)大數(shù)據(jù)體系數(shù)據(jù)交換要求
評論
0/150
提交評論