




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、1宏匯編宏匯編 重復(fù)匯編重復(fù)匯編 條件匯編條件匯編 為用戶提供更加容易、更加靈活、更加向高級語言靠攏的為用戶提供更加容易、更加靈活、更加向高級語言靠攏的匯編工具。匯編工具。匯編語言程序匯編語言程序指令指令偽指令(偽操作)偽指令(偽操作)宏指令宏指令第七章第七章 高級匯編語言技術(shù)高級匯編語言技術(shù)2宏的基本概念宏的基本概念 n宏宏:源程序中一段有獨立功能的程序:源程序中一段有獨立功能的程序代碼。代碼。n宏指令宏指令:用戶自定義的指令。在編程:用戶自定義的指令。在編程時,將多次使用的功能用一條宏指令時,將多次使用的功能用一條宏指令來代替。來代替。3宏定義宏定義 macro_name MACRO 啞元
2、表啞元表 ; 形參形參/虛參虛參 LOCAL 標(biāo)號表標(biāo)號表 (宏定義體)(宏定義體) ENDM * 如果宏定義體內(nèi)有一個或多個語句標(biāo)號,則如果宏定義體內(nèi)有一個或多個語句標(biāo)號,則必須用必須用LOCAL偽操作列出所有的語句標(biāo)號。偽操作列出所有的語句標(biāo)號。4宏調(diào)用宏調(diào)用macro_name 實元表實元表 ; 實參實參* 實元表中的實元與啞元表中的啞元在位置上實元表中的實元與啞元表中的啞元在位置上一一對應(yīng)一一對應(yīng);* 若實元數(shù)若實元數(shù)啞元數(shù),則多余的實元無效啞元數(shù),則多余的實元無效;* 若實元數(shù)若實元數(shù)啞元數(shù),則多余的啞元作啞元數(shù),則多余的啞元作“空空(NUL)”處理處理;* 對宏指令的調(diào)用必須先定義
3、后調(diào)用。宏定義對宏指令的調(diào)用必須先定義后調(diào)用。宏定義獨立于邏輯段。獨立于邏輯段。5宏展開宏展開n把宏定義體復(fù)制到調(diào)用宏指令的位置上,同時用把宏定義體復(fù)制到調(diào)用宏指令的位置上,同時用實元取代啞元,由實元取代啞元,由LOCAL定義的標(biāo)號也定義的標(biāo)號也由由?0000?FFFF替代。替代。例例7.1 保存寄存器保存寄存器宏定義:宏定義:saveregsavereg MACROMACRO push ax push ax push bx push bx push cx push cx push dx push dx push si push si push di push di ENDMENDM宏調(diào)用:宏
4、調(diào)用: savereg宏展開:宏展開: + push ax+ push ax + push bx + push bx + push cx + push cx + push dx + push dx + push si + push si + push di + push di6例例7.2 兩個字相乘兩個字相乘宏定義:宏定義:multiplymultiply MACROMACRO opr1opr1, ,opr2opr2, ,resultresult push dx push dx push ax push ax mov ax, mov ax, opr1opr1 imul imul opr2opr
5、2 mov mov resultresult, ax, ax pop ax pop ax pop dx pop dx ENDMENDM宏調(diào)用:宏調(diào)用: multiplymultiply cxcx, , varvar, , xyzbxxyzbx宏展開宏展開(無語法錯誤無語法錯誤):+ push dx+ push dx+ push ax+ push ax+ mov ax, + mov ax, cxcx+ imul + imul varvar+ mov + mov xyzbxxyzbx, ax, ax+ pop ax+ pop ax+ pop dx+ pop dx7例例7.3 顯示字符顯示字符宏定義
6、:宏定義:Display macro char mov dl,char mov ah,02h int 21hendm宏調(diào)用宏調(diào)用Display aDisplay 0dh宏展開宏展開+mov dl, a+mov ah,02h+int 21h8例例7.4 如果宏指令名與指令助記符或偽操作名相如果宏指令名與指令助記符或偽操作名相同,宏指令的優(yōu)先級最高。同,宏指令的優(yōu)先級最高。宏定義:宏定義:addadd MACROMACRO opr1, opr2, result opr1, opr2, result SUB opr1 SUB opr1,opr2opr2 mov result mov result,o
7、pr1opr1 ENDMENDM宏調(diào)用:宏調(diào)用:addadd ax, bx, cx ax, bx, cxpurge purge add add ; ; 取消宏定義取消宏定義add ax, bxadd ax, bx9例例7.5 求絕對值求絕對值(使用使用LOCAL偽操作偽操作)宏定義:宏定義:absol MACRO operabsol MACRO oper LOCAL LOCAL nextnext cmp oper, 0 cmp oper, 0 jge next jge next neg oper neg opernextnext: : ENDM ENDM宏調(diào)用:宏調(diào)用:absol varabs
8、ol varabsol bxabsol bx宏展開:宏展開: + cmp var, 0+ jge ?0000+ neg var+ ?0000: + cmp bx, 0+ jge ?0001+ neg bx+ ?0001: 10宏匯編操作符宏匯編操作符 &符號符號1 & 符號符號2 ; 宏展開時宏展開時, ,合并前后兩個符號形成一個符號。合并前后兩個符號形成一個符號。leap leap macromacro cond, lab cond, lab j j& &cond labcond lab endmendm宏定義:宏定義:宏調(diào)用:宏調(diào)用:leap z, ther
9、eleap z, thereleap nz, hereleap nz, here宏展開:宏展開:+ jz there+ jz there + jnz here+ jnz here例例7.57.511Msggen Msggen macromacro lab, num,xyz lab, num,xyz lab lab& &num db hello num db hello & &xyzxyz endmendm宏定義:宏定義:宏調(diào)用:宏調(diào)用:Msggen msg,1,world宏展開:宏展開:+ msg1 db hello world+ msg1 db hello w
10、orld例例7.67.612dif macro x, ydif macro x, y mov al mov al,x x sub al sub al,y y endm endmDifsqr macro opr1Difsqr macro opr1,opr2opr2,resultresult dif opr1dif opr1,opr2opr2 imul al imul al mov result mov result,axax endm endm例例7.7 7.7 宏定義:宏定義:宏調(diào)用:宏調(diào)用:Difsqr cl,dl,var宏展開:宏展開:+ mov al+ mov al,clcl+ sub
11、al+ sub al,dldl+ imul al+ imul al+ mov var+ mov var,axax宏定義中可以使用宏調(diào)用,但必須先定義。宏定義中可以使用宏調(diào)用,但必須先定義。13宏匯編操作符宏匯編操作符 %表達(dá)式表達(dá)式 ; 宏展開時,宏展開時,計算表達(dá)式的值,代替對應(yīng)的啞元。計算表達(dá)式的值,代替對應(yīng)的啞元。msg macro count, stringmsg macro count, string msg&count db string msg&count db string endm endmErrmsg macro textErrmsg macro text
12、cntr=cntr+1 cntr=cntr+1 msgmsg % % cntr, textcntr, text endm endm宏定義:宏定義:宏調(diào)用:宏調(diào)用:Cntr=0Cntr=0Ermsg Syntax errorErmsg Syntax errorErrmsg Errmsg Stack overflow 宏展開:宏展開:+msg1 db Syntax error+msg1 db Syntax error+ m s g 2 d b + m s g 2 d b S t a c k overflow 例例7.87.814宏調(diào)用時,實元少于啞元的處理方法:宏調(diào)用時,實元少于啞元的處理方法:1
13、、缺少的實元用作源操作數(shù)定義:Msg macro opr3, opr2, opr1 mov dx, opr1 add dx, opr2 mov opr3, dx endm調(diào)用:msg ax, bx 展開: + mov dx, 0 + add dx, bx + mov ax, dx15宏調(diào)用時,實元少于啞元的處理方法:宏調(diào)用時,實元少于啞元的處理方法:2、缺少的實元用作目的操作數(shù)定義:Msg macro opr1, opr2, opr3 mov dx, opr1 add dx, opr2 mov opr3, dx endm調(diào)用:msg ax, bx 展開: + mov dx, ax + add
14、dx, bx + mov bp+0, dx16宏調(diào)用時,實元少于啞元的處理方法:宏調(diào)用時,實元少于啞元的處理方法:3。缺少的實元用作指令碼定義:Msg macro opr1, opr2, opr3 mov dx, opr1 add dx, opr2 opr3 ax, bx endm調(diào)用:msg ax, bx 源程序編譯時將報告出錯。17宏調(diào)用與子程序調(diào)用的區(qū)別:宏調(diào)用與子程序調(diào)用的區(qū)別:子程序:在程序執(zhí)行期間被調(diào)用,只占用自身大小的一段空間。子程序:在程序執(zhí)行期間被調(diào)用,只占用自身大小的一段空間。主程序主程序call call sub1sub1call call sub1sub1call ca
15、ll sub1sub1子程序子程序 sub1sub1 ret ret18 宏調(diào)用:在匯編期間被展開宏調(diào)用:在匯編期間被展開,每調(diào)用一次就把宏定義體展開一次每調(diào)用一次就把宏定義體展開一次。宏定義宏定義宏調(diào)用宏調(diào)用宏展開宏展開Q macro x,yQ macro x,y endmendm Q a,b Q a,b Q c,d Q c,d Q e,f Q e,f 子程序子程序:優(yōu)點:模塊化,節(jié)省內(nèi)存,可被多次調(diào)用,編程效率高。優(yōu)點:模塊化,節(jié)省內(nèi)存,可被多次調(diào)用,編程效率高。缺點:額外開銷(保存返回地址,計算轉(zhuǎn)向地址,傳遞參缺點:額外開銷(保存返回地址,計算轉(zhuǎn)向地址,傳遞參 數(shù)等)大,增加了執(zhí)行時間。
16、適用于子功能代碼較數(shù)等)大,增加了執(zhí)行時間。適用于子功能代碼較 長、調(diào)用比較頻繁的情況。長、調(diào)用比較頻繁的情況。宏調(diào)用宏調(diào)用:優(yōu)點:參數(shù)傳送簡單,執(zhí)行效率高。優(yōu)點:參數(shù)傳送簡單,執(zhí)行效率高。缺點:不節(jié)省空間,適用于子功能代碼較短、傳參較多的缺點:不節(jié)省空間,適用于子功能代碼較短、傳參較多的 情況。情況。20子程序與宏指令舉例子程序與宏指令舉例要求:求成績數(shù)組中某個成績的名次。要求:求成績數(shù)組中某個成績的名次。1、編寫子程序求名次并調(diào)用;、編寫子程序求名次并調(diào)用;2、編寫宏指令求名次并調(diào)用。、編寫宏指令求名次并調(diào)用。211、編寫子程序并調(diào)用、編寫子程序并調(diào)用DATA SEGMENT SCORE
17、DB ,98, LEN EQU $-SCORE RANK DB LEN DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATASTART: MOV AX, DATA MOV DS, AX MOV AL, SCORE2 LEA SI, SCORE MOV CX, LEN CALL MINGCI MOV RANK2, AH MOV AX, 4C00H INT 21H 22子程序?qū)崿F(xiàn)部分子程序?qū)崿F(xiàn)部分;說明文檔說明文檔MINGCI PROC NEAR MOV AH, 1NEXT:CMP AL, SI JAE CON ADD AH, 1 CON:INC
18、SI LOOP NEXT RETMINGCI ENDPCODE ENDS END START232、編寫宏指令并調(diào)用、編寫宏指令并調(diào)用;宏定義,位于源程序開頭,先定義后調(diào)用宏定義,位于源程序開頭,先定義后調(diào)用MINGCI MACRO ARRAY, NUMBER, SCORE, ORDER LOCAL AGA, CON PUSH SI PUSH CX MOV ORDER,1 LEA SI, ARRAY MOV CX, NUMBER AGA:CMP SCORE, SI JAE CON ADD ORDER, 1 CON:INC SI LOOP AGA POP CX POP SI ENDM24調(diào)用宏指
19、令調(diào)用宏指令DATA SEGMENT SCORE DB ,98, LEN EQU $-SCORE RANK DB LEN DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATASTART: MOV AX, DATA MOV DS, AX MOV AL, SCORE2 MINGCI SCORE, LEN, AL, AH ;宏展開后再進(jìn)行匯編宏展開后再進(jìn)行匯編 MOV RANK2, AH MOV AX, 4C00H INT 21HCODE ENDS END START25宏調(diào)用后的反匯編結(jié)果:宏調(diào)用后的反匯編結(jié)果:267.2 7.2 重復(fù)匯編重復(fù)匯編
20、 用于連續(xù)產(chǎn)生完全相同或基本相同的一組代碼。用于連續(xù)產(chǎn)生完全相同或基本相同的一組代碼。 重復(fù)偽操作重復(fù)偽操作 REPT 格式:格式: REPT 表達(dá)式表達(dá)式 ; ; 重復(fù)塊重復(fù)塊 ENDM例例7.97.9X=0X=0 REPTREPT 10 10X=X+1X=X+1 DB X DB X ENDMENDM+ DB 1+ DB 1+ DB 2+ DB 2+ DB 3+ DB 3 + DB 10+ DB 10匯編后:匯編后:27不定不定重復(fù)偽操作:重復(fù)偽操作: IRP IRP格式:格式: IRP 啞元,啞元, ; ; 重復(fù)塊重復(fù)塊 ENDM每次重復(fù)用自變量表中的一項取代啞元,重復(fù)次數(shù)由自變量的個數(shù)決
21、定。每次重復(fù)用自變量表中的一項取代啞元,重復(fù)次數(shù)由自變量的個數(shù)決定。例例7.107.10 Data segment array label byte irp irp k, k, db k db k endm endmData endsData ends28不定不定重復(fù)偽操作重復(fù)偽操作IRPC: IRPC 啞元,字符串啞元,字符串 ; ; 重復(fù)塊重復(fù)塊 ENDM 每次重復(fù)用字符串中的一個字符取代啞元,重復(fù)次數(shù)等于字符串中的每次重復(fù)用字符串中的一個字符取代啞元,重復(fù)次數(shù)等于字符串中的字符數(shù)。字符數(shù)。例例7.117.11: data segmentdata segment array label bytearray label byte IRPC IRPC K, 12345 K, 12345 db NO.&K db NO.&
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 肌痙攣的臨床護(hù)理
- 商師高二聯(lián)考試卷及答案
- 山東高一月考試卷及答案
- 2025黑龍江龍煤雞西礦業(yè)有限責(zé)任公司招聘900人筆試參考題庫附帶答案詳解
- 2025中信銀行企業(yè)貸款合同英文翻譯
- 稀有金屬加工中的質(zhì)量改進(jìn)方法研究考核試卷
- 禮儀用品行業(yè)品牌法律保護(hù)與品牌維權(quán)策略考核試卷
- 磚瓦制品在歷史建筑保護(hù)中的應(yīng)用考核試卷
- 電機在電動輪椅及助行器的助力技術(shù)考核試卷
- 2025建筑工程水電施工勞務(wù)分包合同允許分包給個體工商戶
- GB/T 21567-2008危險品爆炸品撞擊感度試驗方法
- 《綠色建筑概論》整套教學(xué)課件
- 衛(wèi)生人才培養(yǎng)方案計劃
- 產(chǎn)業(yè)發(fā)展理論-第七章-產(chǎn)業(yè)政策課件
- DB64-T 1684-2020 智慧工地建設(shè)技術(shù)標(biāo)準(zhǔn)-(高清可復(fù)制)
- 婚喪嫁娶事宜備案表
- 幼兒園教學(xué)課件小班社會《孤獨的小熊》課件
- “三級”安全安全教育記錄卡
- 風(fēng)生水起博主的投資周記
- 賽艇賽事活動推廣方案
- 人教版小學(xué)五年級數(shù)學(xué)競賽試題及答案
評論
0/150
提交評論