




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1宏匯編宏匯編 重復(fù)匯編重復(fù)匯編 條件匯編條件匯編 為用戶(hù)提供更加容易、更加靈活、更加向高級(jí)語(yǔ)言靠攏的為用戶(hù)提供更加容易、更加靈活、更加向高級(jí)語(yǔ)言靠攏的匯編工具。匯編工具。匯編語(yǔ)言程序匯編語(yǔ)言程序指令指令偽指令(偽操作)偽指令(偽操作)宏指令宏指令第七章第七章 高級(jí)匯編語(yǔ)言技術(shù)高級(jí)匯編語(yǔ)言技術(shù)2宏的基本概念宏的基本概念 n宏宏:源程序中一段有獨(dú)立功能的程序:源程序中一段有獨(dú)立功能的程序代碼。代碼。n宏指令宏指令:用戶(hù)自定義的指令。在編程:用戶(hù)自定義的指令。在編程時(shí),將多次使用的功能用一條宏指令時(shí),將多次使用的功能用一條宏指令來(lái)代替。來(lái)代替。3宏定義宏定義 macro_name MACRO 啞元
2、表啞元表 ; 形參形參/虛參虛參 LOCAL 標(biāo)號(hào)表標(biāo)號(hào)表 (宏定義體)(宏定義體) ENDM * 如果宏定義體內(nèi)有一個(gè)或多個(gè)語(yǔ)句標(biāo)號(hào),則如果宏定義體內(nèi)有一個(gè)或多個(gè)語(yǔ)句標(biāo)號(hào),則必須用必須用LOCAL偽操作列出所有的語(yǔ)句標(biāo)號(hào)。偽操作列出所有的語(yǔ)句標(biāo)號(hào)。4宏調(diào)用宏調(diào)用macro_name 實(shí)元表實(shí)元表 ; 實(shí)參實(shí)參* 實(shí)元表中的實(shí)元與啞元表中的啞元在位置上實(shí)元表中的實(shí)元與啞元表中的啞元在位置上一一對(duì)應(yīng)一一對(duì)應(yīng);* 若實(shí)元數(shù)若實(shí)元數(shù)啞元數(shù),則多余的實(shí)元無(wú)效啞元數(shù),則多余的實(shí)元無(wú)效;* 若實(shí)元數(shù)若實(shí)元數(shù)啞元數(shù),則多余的啞元作啞元數(shù),則多余的啞元作“空空(NUL)”處理處理;* 對(duì)宏指令的調(diào)用必須先定義
3、后調(diào)用。宏定義對(duì)宏指令的調(diào)用必須先定義后調(diào)用。宏定義獨(dú)立于邏輯段。獨(dú)立于邏輯段。5宏展開(kāi)宏展開(kāi)n把宏定義體復(fù)制到調(diào)用宏指令的位置上,同時(shí)用把宏定義體復(fù)制到調(diào)用宏指令的位置上,同時(shí)用實(shí)元取代啞元,由實(shí)元取代啞元,由LOCAL定義的標(biāo)號(hào)也定義的標(biāo)號(hà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宏展開(kāi):宏展開(kāi): + 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 兩個(gè)字相乘兩個(gè)字相乘宏定義:宏定義: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宏展開(kāi)宏展開(kāi)(無(wú)語(yǔ)法錯(cuò)誤無(wú)語(yǔ)法錯(cuò)誤):+ 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宏展開(kāi)宏展開(kāi)+mov dl, a+mov ah,02h+int 21h8例例7.4 如果宏指令名與指令助記符或偽操作名相如果宏指令名與指令助記符或偽操作名相同,宏指令的優(yōu)先級(jí)最高。同,宏指令的優(yōu)先級(jí)最高。宏定義:宏定義: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 求絕對(duì)值求絕對(duì)值(使用使用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宏展開(kāi):宏展開(kāi): + cmp var, 0+ jge ?0000+ neg var+ ?0000: + cmp bx, 0+ jge ?0001+ neg bx+ ?0001: 10宏匯編操作符宏匯編操作符 &符號(hào)符號(hào)1 & 符號(hào)符號(hào)2 ; 宏展開(kāi)時(shí)宏展開(kāi)時(shí), ,合并前后兩個(gè)符號(hào)形成一個(gè)符號(hào)。合并前后兩個(gè)符號(hào)形成一個(gè)符號(hào)。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宏展開(kāi):宏展開(kāi):+ 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宏展開(kāi):宏展開(kāi):+ 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宏展開(kāi):宏展開(kāi):+ 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á)式 ; 宏展開(kāi)時(shí),宏展開(kāi)時(shí),計(jì)算表達(dá)式的值,代替對(duì)應(yīng)的啞元。計(jì)算表達(dá)式的值,代替對(duì)應(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 宏展開(kāi):宏展開(kāi):+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)用時(shí),實(shí)元少于啞元的處理方法:宏調(diào)用時(shí),實(shí)元少于啞元的處理方法:1
13、、缺少的實(shí)元用作源操作數(shù)定義:Msg macro opr3, opr2, opr1 mov dx, opr1 add dx, opr2 mov opr3, dx endm調(diào)用:msg ax, bx 展開(kāi): + mov dx, 0 + add dx, bx + mov ax, dx15宏調(diào)用時(shí),實(shí)元少于啞元的處理方法:宏調(diào)用時(shí),實(shí)元少于啞元的處理方法:2、缺少的實(shí)元用作目的操作數(shù)定義:Msg macro opr1, opr2, opr3 mov dx, opr1 add dx, opr2 mov opr3, dx endm調(diào)用:msg ax, bx 展開(kāi): + mov dx, ax + add
14、dx, bx + mov bp+0, dx16宏調(diào)用時(shí),實(shí)元少于啞元的處理方法:宏調(diào)用時(shí),實(shí)元少于啞元的處理方法:3。缺少的實(shí)元用作指令碼定義:Msg macro opr1, opr2, opr3 mov dx, opr1 add dx, opr2 opr3 ax, bx endm調(diào)用:msg ax, bx 源程序編譯時(shí)將報(bào)告出錯(cuò)。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)用:在匯編期間被展開(kāi)宏調(diào)用:在匯編期間被展開(kāi),每調(diào)用一次就把宏定義體展開(kāi)一次每調(diào)用一次就把宏定義體展開(kāi)一次。宏定義宏定義宏調(diào)用宏調(diào)用宏展開(kāi)宏展開(kāi)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)點(diǎn):模塊化,節(jié)省內(nèi)存,可被多次調(diào)用,編程效率高。優(yōu)點(diǎn):模塊化,節(jié)省內(nèi)存,可被多次調(diào)用,編程效率高。缺點(diǎn):額外開(kāi)銷(xiāo)(保存返回地址,計(jì)算轉(zhuǎn)向地址,傳遞參缺點(diǎn):額外開(kāi)銷(xiāo)(保存返回地址,計(jì)算轉(zhuǎn)向地址,傳遞參 數(shù)等)大,增加了執(zhí)行時(shí)間。
16、適用于子功能代碼較數(shù)等)大,增加了執(zhí)行時(shí)間。適用于子功能代碼較 長(zhǎng)、調(diào)用比較頻繁的情況。長(zhǎng)、調(diào)用比較頻繁的情況。宏調(diào)用宏調(diào)用:優(yōu)點(diǎn):參數(shù)傳送簡(jiǎn)單,執(zhí)行效率高。優(yōu)點(diǎn):參數(shù)傳送簡(jiǎn)單,執(zhí)行效率高。缺點(diǎn):不節(jié)省空間,適用于子功能代碼較短、傳參較多的缺點(diǎn):不節(jié)省空間,適用于子功能代碼較短、傳參較多的 情況。情況。20子程序與宏指令舉例子程序與宏指令舉例要求:求成績(jī)數(shù)組中某個(gè)成績(jī)的名次。要求:求成績(jī)數(shù)組中某個(gè)成績(jī)的名次。1、編寫(xiě)子程序求名次并調(diào)用;、編寫(xiě)子程序求名次并調(diào)用;2、編寫(xiě)宏指令求名次并調(diào)用。、編寫(xiě)宏指令求名次并調(diào)用。211、編寫(xiě)子程序并調(diào)用、編寫(xiě)子程序并調(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)部分;說(shuō)明文檔說(shuō)明文檔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、編寫(xiě)宏指令并調(diào)用、編寫(xiě)宏指令并調(diào)用;宏定義,位于源程序開(kāi)頭,先定義后調(diào)用宏定義,位于源程序開(kāi)頭,先定義后調(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 ;宏展開(kāi)后再進(jìn)行匯編宏展開(kāi)后再進(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ù)用自變量表中的一項(xiàng)取代啞元,重復(fù)次數(shù)由自變量的個(gè)數(shù)決
21、定。每次重復(fù)用自變量表中的一項(xiàng)取代啞元,重復(fù)次數(shù)由自變量的個(gè)數(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ù)用字符串中的一個(gè)字符取代啞元,重復(fù)次數(shù)等于字符串中的每次重復(fù)用字符串中的一個(gè)字符取代啞元,重復(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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑裝飾施工中的質(zhì)量保證措施考核試卷
- 中藥材種植的農(nóng)業(yè)生態(tài)環(huán)境保護(hù)法制建設(shè)考核試卷
- 批發(fā)業(yè)務(wù)會(huì)計(jì)與財(cái)務(wù)管理考核試卷
- 文化空間營(yíng)造考核試卷
- 體育運(yùn)動(dòng)訓(xùn)練中的運(yùn)動(dòng)康復(fù)技術(shù)考核試卷
- 體育航空運(yùn)動(dòng)飛行器空中交通管制操作考核試卷
- 寵物友好郵輪旅行船上寵物友好娛樂(lè)活動(dòng)策劃分享考核試卷
- 走路的安全課件
- 勞動(dòng)合同補(bǔ)充合同范本
- 綠化租賃合同范本
- 筋膜刀的臨床應(yīng)用
- DB32-T 4790-2024建筑施工特種作業(yè)人員安全操作技能考核標(biāo)準(zhǔn)
- 2022年安徽阜陽(yáng)太和縣人民醫(yī)院本科及以上學(xué)歷招聘筆試歷年典型考題及考點(diǎn)剖析附帶答案詳解
- 2024-2030年中國(guó)反芻動(dòng)物飼料行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略分析報(bào)告
- 護(hù)理團(tuán)體標(biāo)準(zhǔn)解讀-成人氧氣吸入療法護(hù)理
- 幼兒園大班《識(shí)字卡》課件
- 2024-2030全球與中國(guó)寵物醫(yī)院市場(chǎng)現(xiàn)狀及未來(lái)發(fā)展趨勢(shì)
- 《研學(xué)旅行課程設(shè)計(jì)》課件-2認(rèn)識(shí)研學(xué)旅行的參與方
- 安全警示教育的會(huì)議記錄內(nèi)容
- 夫妻異地辭職信
- 2024年度-銀行不良清收技巧培訓(xùn)課件(學(xué)員版)
評(píng)論
0/150
提交評(píng)論