




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1宏匯編宏匯編 重復匯編重復匯編 條件匯編條件匯編 為用戶提供更加容易、更加靈活、更加向高級語言靠攏的為用戶提供更加容易、更加靈活、更加向高級語言靠攏的匯編工具。匯編工具。匯編語言程序匯編語言程序指令指令偽指令(偽操作)偽指令(偽操作)宏指令宏指令第七章第七章 高級匯編語言技術高級匯編語言技術2宏的基本概念宏的基本概念 n宏宏:源程序中一段有獨立功能的程序:源程序中一段有獨立功能的程序代碼。代碼。n宏指令宏指令:用戶自定義的指令。在編程:用戶自定義的指令。在編程時,將多次使用的功能用一條宏指令時,將多次使用的功能用一條宏指令來代替。來代替。3宏定義宏定義 macro_name MACRO 啞元
2、表啞元表 ; 形參形參/虛參虛參 LOCAL 標號表標號表 (宏定義體)(宏定義體) ENDM * 如果宏定義體內有一個或多個語句標號,則如果宏定義體內有一個或多個語句標號,則必須用必須用LOCAL偽操作列出所有的語句標號。偽操作列出所有的語句標號。4宏調用宏調用macro_name 實元表實元表 ; 實參實參* 實元表中的實元與啞元表中的啞元在位置上實元表中的實元與啞元表中的啞元在位置上一一對應一一對應;* 若實元數若實元數啞元數,則多余的實元無效啞元數,則多余的實元無效;* 若實元數若實元數啞元數,則多余的啞元作啞元數,則多余的啞元作“空空(NUL)”處理處理;* 對宏指令的調用必須先定義
3、后調用。宏定義對宏指令的調用必須先定義后調用。宏定義獨立于邏輯段。獨立于邏輯段。5宏展開宏展開n把宏定義體復制到調用宏指令的位置上,同時用把宏定義體復制到調用宏指令的位置上,同時用實元取代啞元,由實元取代啞元,由LOCAL定義的標號也定義的標號也由由?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宏調用:宏
4、調用: 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宏調用:宏調用: 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宏調用宏調用Display aDisplay 0dh宏展開宏展開+mov dl, a+mov ah,02h+int 21h8例例7.4 如果宏指令名與指令助記符或偽操作名相如果宏指令名與指令助記符或偽操作名相同,宏指令的優先級最高。同,宏指令的優先級最高。宏定義:宏定義:addadd MACROMACRO opr1, opr2, result opr1, opr2, result SUB opr1 SUB opr1,opr2opr2 mov result mov result,o
7、pr1opr1 ENDMENDM宏調用:宏調用: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宏調用:宏調用: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宏定義:宏定義:宏調用:宏調用: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宏定義:宏定義:宏調用:宏調用: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 宏定義:宏定義:宏調用:宏調用:Difsqr cl,dl,var宏展開:宏展開:+ mov al+ mov al,clcl+ sub
11、al+ sub al,dldl+ imul al+ imul al+ mov var+ mov var,axax宏定義中可以使用宏調用,但必須先定義。宏定義中可以使用宏調用,但必須先定義。13宏匯編操作符宏匯編操作符 %表達式表達式 ; 宏展開時,宏展開時,計算表達式的值,代替對應的啞元。計算表達式的值,代替對應的啞元。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宏定義:宏定義:宏調用:宏調用: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宏調用時,實元少于啞元的處理方法:宏調用時,實元少于啞元的處理方法:1
13、、缺少的實元用作源操作數定義:Msg macro opr3, opr2, opr1 mov dx, opr1 add dx, opr2 mov opr3, dx endm調用:msg ax, bx 展開: + mov dx, 0 + add dx, bx + mov ax, dx15宏調用時,實元少于啞元的處理方法:宏調用時,實元少于啞元的處理方法:2、缺少的實元用作目的操作數定義:Msg macro opr1, opr2, opr3 mov dx, opr1 add dx, opr2 mov opr3, dx endm調用:msg ax, bx 展開: + mov dx, ax + add
14、dx, bx + mov bp+0, dx16宏調用時,實元少于啞元的處理方法:宏調用時,實元少于啞元的處理方法:3。缺少的實元用作指令碼定義:Msg macro opr1, opr2, opr3 mov dx, opr1 add dx, opr2 opr3 ax, bx endm調用:msg ax, bx 源程序編譯時將報告出錯。17宏調用與子程序調用的區別:宏調用與子程序調用的區別:子程序:在程序執行期間被調用,只占用自身大小的一段空間。子程序:在程序執行期間被調用,只占用自身大小的一段空間。主程序主程序call call sub1sub1call call sub1sub1call ca
15、ll sub1sub1子程序子程序 sub1sub1 ret ret18 宏調用:在匯編期間被展開宏調用:在匯編期間被展開,每調用一次就把宏定義體展開一次每調用一次就把宏定義體展開一次。宏定義宏定義宏調用宏調用宏展開宏展開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 子程序子程序:優點:模塊化,節省內存,可被多次調用,編程效率高。優點:模塊化,節省內存,可被多次調用,編程效率高。缺點:額外開銷(保存返回地址,計算轉向地址,傳遞參缺點:額外開銷(保存返回地址,計算轉向地址,傳遞參 數等)大,增加了執行時間。
16、適用于子功能代碼較數等)大,增加了執行時間。適用于子功能代碼較 長、調用比較頻繁的情況。長、調用比較頻繁的情況。宏調用宏調用:優點:參數傳送簡單,執行效率高。優點:參數傳送簡單,執行效率高。缺點:不節省空間,適用于子功能代碼較短、傳參較多的缺點:不節省空間,適用于子功能代碼較短、傳參較多的 情況。情況。20子程序與宏指令舉例子程序與宏指令舉例要求:求成績數組中某個成績的名次。要求:求成績數組中某個成績的名次。1、編寫子程序求名次并調用;、編寫子程序求名次并調用;2、編寫宏指令求名次并調用。、編寫宏指令求名次并調用。211、編寫子程序并調用、編寫子程序并調用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子程序實現部分子程序實現部分;說明文檔說明文檔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、編寫宏指令并調用、編寫宏指令并調用;宏定義,位于源程序開頭,先定義后調用宏定義,位于源程序開頭,先定義后調用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調用宏指
19、令調用宏指令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 ;宏展開后再進行匯編宏展開后再進行匯編 MOV RANK2, AH MOV AX, 4C00H INT 21HCODE ENDS END START25宏調用后的反匯編結果:宏調用后的反匯編結果:267.2 7.2 重復匯編重復匯編
20、 用于連續產生完全相同或基本相同的一組代碼。用于連續產生完全相同或基本相同的一組代碼。 重復偽操作重復偽操作 REPT 格式:格式: REPT 表達式表達式 ; ; 重復塊重復塊 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不定不定重復偽操作:重復偽操作: IRP IRP格式:格式: IRP 啞元,啞元, ; ; 重復塊重復塊 ENDM每次重復用自變量表中的一項取代啞元,重復次數由自變量的個數決
21、定。每次重復用自變量表中的一項取代啞元,重復次數由自變量的個數決定。例例7.107.10 Data segment array label byte irp irp k, k, db k db k endm endmData endsData ends28不定不定重復偽操作重復偽操作IRPC: IRPC 啞元,字符串啞元,字符串 ; ; 重復塊重復塊 ENDM 每次重復用字符串中的一個字符取代啞元,重復次數等于字符串中的每次重復用字符串中的一個字符取代啞元,重復次數等于字符串中的字符數。字符數。例例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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 七年級地理下冊 7.1 日本教學設計 湘教版
- 2 做中華人文精神的弘揚者公開課一等獎創新教學設計- 統編版道德與法治七年級下冊
- 人教版歷史與社會八年級下冊 6.2《連通世界的新航路》教學設計
- 幼兒律動編創流程
- 2025年度商務禮儀知識競賽試題及答案(一)
- 小學統編版(2024)騎鵝旅行記教學設計及反思
- 魯教版化學(五四學制)八年級4.3《到實驗室去:氧氣的實驗室制取與性質》教學課件
- 租賃合同及訂單處理流程
- 重慶房屋買賣合同范本
- 廚房衛生間裝修合同
- 完善食品安全風險管控清單制度
- 2025年度光伏發電工程質量保修服務協議3篇
- 心理戰心理策略-洞察分析
- 二年級語文下冊 識字 口語交際 長大以后做什么教學實錄 新人教版
- 外協單位進廠安全
- 心肺復蘇術-cpr課件
- 影視動畫產業升級-洞察分析
- 高中政治第3課時《正確對待外來文化》教學設計
- 2024年度社區工作者練習題庫可打印
- 2024年形勢與政策 第二講 中國經濟高質量發展扎實推進(課件)
- 數字鄉村農村信息化服務平臺建設方案-數字農村信息化云服平臺建設方案
評論
0/150
提交評論