版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第6章高級(jí)匯編語(yǔ)言技術(shù)一、宏匯編 宏定義是用一組偽操作來(lái)實(shí)現(xiàn)的。其格式是: macro_name MACRO dumny_parameter_list . (宏定義體) ENDM其中MACRO和ENDM是一對(duì)偽操作.這對(duì)偽操作之間是宏定義體-是一組獨(dú)立功能的程序代碼.宏指令名(macro_name)給出該宏定義的名稱(chēng),調(diào)用時(shí)就使用宏指令名來(lái)調(diào)用該宏定義.其中啞元表(dumny_parameter_list)給出了該宏定義中所用到的形式參數(shù)(或稱(chēng)虛參),每個(gè)啞元之間用逗號(hào)隔開(kāi). 經(jīng)宏定義后的宏指令就可以在源程序中調(diào)用.這種對(duì)宏指令的調(diào)用稱(chēng)為宏調(diào)用,宏調(diào)用的格式是: macro_name actu
2、al_parameter_list實(shí)元表(actual_parameter_list)中的每一項(xiàng)為實(shí)元,相互之間用逗號(hào)隔開(kāi).1.宏定義可以無(wú)變?cè)甓x: SAVEREG MACRO PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI ENDM宏調(diào)用: SAVEREG2.變?cè)梢允遣僮鞔a宏定義: FOO MACRO P1,P2,P3 MOV AX,P1 P2 P3 ENDM宏調(diào)用: FOO WORD_VAR,INC,AX宏展開(kāi): + MOV AX,WORD_VAR + INC AX3.變?cè)梢允遣僮鞔a的一部分,但在宏定義體中必須用&作為分隔符.宏定義:
3、 LEAP MACRO COND,LAB J&COND LAB ENDM宏調(diào)用: . LEAP Z,THERE . LEAP NZ,HERE .宏展開(kāi): . + JZ THERE . + JNZ HERE .4.&是一個(gè)操作符,它在宏定義體中可以作為啞元的前綴,展開(kāi)時(shí)可以把&前后個(gè)符號(hào)合并而形成一個(gè)符號(hào),這個(gè)符號(hào)可以是操作碼,操作數(shù)或是一個(gè)字符串宏定義: PO MACRO P1 JMP TA&P1 ENDM宏調(diào)用: FO WORD_VAR宏展開(kāi): + JMP TAWORD_VAR5.實(shí)元是ASCII串的情況宏定義: MSGGEN MACRO LAB,NUM,XYZ LAB&NUM DB HEL
4、LO MR.&XYZ ENDM宏調(diào)用: MSGGEN MSG,1,TAYLOR宏展開(kāi): + MSG1 DB HELLO MR.TAYLOR6.宏指令名可以與指令助記符或偽操作名相同,在這種情況下,宏指令的優(yōu)先級(jí)最高,而同名的指令或偽操作就失效了.偽操作PURGE可以用來(lái)在適當(dāng)?shù)臅r(shí)候取消宏定義,以便恢復(fù)指令的原始含義.宏定義: ADD MACRO OPR1,OPR2,RESULT . ENDM宏調(diào)用: . ADD XX,YY,ZZ PURGE ADD .在宏調(diào)用后,用PURGE偽操作取消定義,以便恢復(fù)ADD指令的原始含義,在PURGE ADD后面所用的ADD指令,則服從機(jī)器指令的定義. PURG
5、E偽操作可同時(shí)取消多個(gè)宏操作,此時(shí)各宏指令之間用逗號(hào)隔開(kāi).7.LOCAL偽操作的使用.宏定義體內(nèi)允許使用標(biāo)號(hào),如:宏定義: ABSOL MACRO OPER CMP OPER,O JGE NEXT NEG OPER NEXT: ENDM如果程序中多次調(diào)用該宏定義時(shí),展開(kāi)后會(huì)出現(xiàn)標(biāo)號(hào)的多重定義.為此系統(tǒng)提供了LOCAL偽操作,其格式是 LOCAL list of local labels其中局部標(biāo)號(hào)表內(nèi)的各標(biāo)號(hào)之間用逗號(hào)隔開(kāi).匯編程序?qū)OCAL偽操作的局部標(biāo)號(hào)表中的每一個(gè)局部標(biāo)號(hào)建立唯一的符號(hào)(用?0000?FFFF)以代替在展開(kāi)中存在的每個(gè)局部標(biāo)號(hào).必須注意,LOCAL偽操作只能用在宏定義體
6、內(nèi),而且它必須是MACRO偽操作后的第一個(gè)語(yǔ)句,在MACRO和LOCAL偽操作之間還不允許有注釋和分號(hào)標(biāo)志. 本例中的ABSOL宏定義在考慮有多次調(diào)用可能性的情況下,應(yīng)定義為: ABSOL MACRO OPER LOCAL NEXT CMP OPER,0 JGE NEXT NEG OPER NEXT: ENDM宏調(diào)用: . ABSOL VAR . ABSOL BX .宏展開(kāi): . + CMP VAR,0 + JGE ?0000 + NEG VAR +?0000: . + CMP BX,0 + JGE ?0001 + NEG BX +?0001: .8.宏定義中允許使用宏調(diào)用,其限制條件是:必須
7、先定義后調(diào)用宏定義: DIF MACRO X,Y MOV AX,X SUB AX,Y ENDMDIFSQR MACRO OPR1,OPR2,RESULT PUSH DX PUSH AX DIF OPR1,OPR2 IMUL AX MOV RESULT,AX POP AX POP DX ENDM宏調(diào)用: DIFSQR VAR1,VAR2,VAR39.宏定義體內(nèi)不僅可以使用宏調(diào)用,也可以包含宏定義.宏定義: DEFMAC MACRO MACNAM,OPERATOR MACNAM MACRO X,Y,Z PUSH AX MOV AX,X OPERATOR AX,Y MOV Z,AX POP AX E
8、NDM ENDM其中MACNAM是內(nèi)層的宏定義名,但又是外層宏定義的啞元,所以調(diào)用DEFMAC時(shí),就形成一個(gè)宏定義.宏調(diào)用: DEFMAC ADDITION,ADD宏展開(kāi): + ADDITION MACRO X,Y,Z PUSH AX MOV AX,X ADD AX,Y MOV Z,AX POP AX ENDM形成加法宏定義ADDITION.同樣,宏調(diào)用 DEFMAC SUBTRACT,SUB形成減法的宏定義.當(dāng)然在形成這些宏定義后,就可以使用宏調(diào)用 ADDITION VAR1,VAR2,VAR3而展開(kāi)成: + PUSH AX + MOV AX,VAR1 + ADD AX,VAR2 + MOV
9、 VAR3,AX + POP AX10.這里再介紹一個(gè)宏定義的變?cè)惺褂玫膫尾僮?,它的格式是: %expression匯編程序把跟在%之后的表達(dá)式的值轉(zhuǎn)換成當(dāng)前基數(shù)下的數(shù),在展開(kāi)期間,用這個(gè)數(shù)來(lái)取代啞元.宏定義: MSG MACRO COUNT,STRING MSG&COUNT DB STRING ENDM ERRMSG MACRO TEXT CNTR=CNTR+1 MSG % CNTR,TEXT ENDM宏調(diào)用: . CNTR=0 ERRMSG SYNTAX ERROR . ERRMSG INVALID OPERAND .宏展開(kāi): . + MSG1 DB SYNTAX ERROR . +
10、MSG2 DB INVALID OPERAND .二、重復(fù)匯編 有時(shí)匯編語(yǔ)言程序需要連續(xù)地重復(fù)完全相同的或者幾乎完全相同的一組代碼,這時(shí)可使用重復(fù)匯編。1.重復(fù)偽操作其格式為: REPT expression . (重復(fù)塊) ENDM其中表達(dá)式的值用來(lái)確定重復(fù)塊的重復(fù)次數(shù),表達(dá)式中如包含外部或未定義的項(xiàng)則匯編指示出錯(cuò). 重復(fù)偽操作并不一定要在宏定義體內(nèi),例如:X=0 REPT 10X=X+1 DB X ENDM則匯編后產(chǎn)生 + DB 1 + DB 2 + DB 3 . + DB 10把字符A到Z的ASCII碼填入數(shù)組TABLECHAR=ATABLE LABEL BYTE REPT 26 DB
11、CHAR CHAR=CHAR+1 ENDM用宏定義及重復(fù)偽操作把TAB,TAB+1,TAB+2,.,TAB+16的內(nèi)容存入堆棧.宏定義: PUSH_TAB MACRO K PUSH TAB+K ENDM宏調(diào)用: I=0 REPT 17 PUSH_TAB % I I=I+1 ENDM要求建立一個(gè)100D字的數(shù)組,其中每個(gè)字的內(nèi)容是下一個(gè)字的地址,而最后一個(gè)字的內(nèi)容是第一個(gè)字的地址.ARRAY LABEL WORD REPT 99 DW $+2 ENDM DW ARRAY 2.不定重復(fù)偽操作 (1)IRP偽操作格式是: IRP dummy, . (重復(fù)塊) ENDM匯編程序把重復(fù)塊的代碼重復(fù)幾次,
12、每次重復(fù)把重復(fù)塊中的啞元用自變量表中的一項(xiàng)來(lái)取代,下一次取代下一項(xiàng),重復(fù)次數(shù)由自變量表中的自變量個(gè)數(shù)來(lái)確定.自變量表必須用尖括號(hào)括起,它可以是常數(shù),符號(hào),字符串等.例1: IRP X, DB X ENDM匯編后得: + DB 1 + DB 2 . + DB 10例2: IRP REG, PUSH REG ENDM匯編后得: + PUSH AX + PUSH BX + PUSH CX + PUSH DX (2)IRPC偽操作格式是: IRPC dummy,string(或) . (重復(fù)塊) ENDMIRPC和IRP類(lèi)似,但自變量表必須是字符串.重復(fù)次數(shù)由字符串中的字符個(gè)數(shù)確定,每次重復(fù)用字符串中
13、的下一個(gè)字符取代重復(fù)塊中的啞元.例:例1: IRPC X,0 1 2 3 4 5 6 7 DB X+1 ENDM匯編后得: + DB 1 + DB 2 . + DB 8例2: IRPC K,A B C D PUSH K&X匯編后展開(kāi)形成: + PUSH AX + PUSH BX + PUSH CX + PUSH DX三、條件匯編 匯編程序能根據(jù)條件把一段源程序包括在匯編語(yǔ)言程序內(nèi)或者把它排除在外,這里就用到條件偽操作.條件偽操作的一般格式是: IFXX argument . 自變量滿(mǎn)足給定條件匯編此塊 ELSE . 自變量不滿(mǎn)足給定條件匯編此塊 ENDIF自變量必須在匯編程序第一啟遍掃視后就成
14、為確定的數(shù)值.條件偽操作中的XX表示條件如下: IF expression 匯編程序求出表達(dá)式的值,如此值不為0則滿(mǎn)足條件. IFE expression 如求出表達(dá)式的值為0則滿(mǎn)足條件. IFDEF symbol 如符號(hào)已在程序中定義,或者已用EXTRN偽操作說(shuō)明該符號(hào)是在外部定義的,則 滿(mǎn)足條件. IFNDEF symbol 如符號(hào)未定義或未通過(guò)EXTRN說(shuō)明為外部符號(hào)則滿(mǎn)足條件. IFB 如自變量為空則滿(mǎn)足條件 IFNB 如自變量不為空則滿(mǎn)足條件 IFIDN , 如果字符串和字符串相同,則滿(mǎn)足條件. IFDIF , 如果字符串和字符串不相同,則滿(mǎn)足條件.條件偽操作可以用在宏定義體內(nèi),也可
15、以用在宏定義體外,也允許嵌套任意次.例1:宏指令MAX把三個(gè)變?cè)械淖畲笾捣旁贏X中,而且使變?cè)獢?shù)不同時(shí)產(chǎn)生不同的程序段.宏定義: MAX MACRO K,A,B,C LOCAL NEXT,OUT MOV AX,A IF K-1 IF K-2 CMP C,AX JLE NEXT MOV AX,C ENDIF NEXT: CMP B,AX JLE OUT MOV AX,B ENDIF OUT: ENDM宏調(diào)用: MAX 1,P MAX 2,P,Q MAX 3,P,Q,R宏展開(kāi): MAX 1,P + MOV AX,P +?0001: MAX 2,P,Q + MOV AX,P +?0002:CMP
16、Q,AX + JLE ?0003 + MOV AX,Q +?0003: MAX 3,P,Q,R + MOV AX,P + CMP R,AX + JLE ?0004 + MOV AX,R +?0004:CMP Q,AX + JLE ?0005 + MOV AX,Q +?0005:例2.宏指令GOTO L,X,REL,Y(其中REL可以是Z,NZ,L,NL等)可以根據(jù)不同情況產(chǎn)生無(wú)條件轉(zhuǎn)移指令或比較和條件轉(zhuǎn)移指令.宏定義: GOTO MACRO L,X,REL,Y JFB JMP L ELSE MOV AX,X CMP AX,Y J&REL L ENDIF ENDM宏調(diào)用: . GOTO LOOP,SUM,NZ,15 . GOTO EXIT .宏展開(kāi): . + MOV AX,SUM + CMP AX,15 + JNZ LOOP . + JMP EXIT例3.宏定義可允許遞歸調(diào)用,此時(shí)條件偽操作可用來(lái)結(jié)束宏遞歸 宏指令POWER可以用來(lái)實(shí)現(xiàn)X和2N相乘.這只需對(duì)X左移N次可實(shí)現(xiàn),可以設(shè)COUNT為遞歸次數(shù)的計(jì)數(shù)值,當(dāng)該數(shù)與N相等時(shí)即可結(jié)束遞歸調(diào)用.宏定義: POWER MACRO X,N SAL X,1 COUTN=COUT+1 IF COUNT-N POWER X,N ENDIF ENDM宏調(diào)用: COUTN=0 POWER AX,3宏展開(kāi): + SAL AX,1 + SAL A
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025出租車(chē)司機(jī)用工合同范本
- 2025商鋪?zhàn)赓U合同簡(jiǎn)單的范本
- 全新清算協(xié)議合同-二零二五年度清算與債務(wù)重組3篇
- 2025年度全新合同:人工智能輔助駕駛系統(tǒng)研發(fā)與推廣協(xié)議3篇
- 2025年度環(huán)保設(shè)備安裝與環(huán)保技術(shù)咨詢(xún)合同3篇
- 2025年度農(nóng)村房屋改造裝修與農(nóng)村光伏發(fā)電項(xiàng)目合同
- 二零二五年度出國(guó)工人勞務(wù)輸出與職業(yè)規(guī)劃合同
- 二零二五年度智能漁業(yè)養(yǎng)魚(yú)設(shè)備共享合作協(xié)議3篇
- 2025年度農(nóng)業(yè)科技賒銷(xiāo)合作協(xié)議3篇
- 2025年度水上安全事故處理與救援合作協(xié)議3篇
- 無(wú)人機(jī)與人工智能結(jié)合的應(yīng)用
- !懸臂式擋土墻計(jì)算軟件
- 運(yùn)維應(yīng)急預(yù)案
- GB 4806.7-2023食品安全國(guó)家標(biāo)準(zhǔn)食品接觸用塑料材料及制品
- 工程造價(jià)審計(jì)投標(biāo)方案
- 辦公樓裝修環(huán)境與對(duì)策分析
- 《web前端技術(shù)》課程標(biāo)準(zhǔn)
- 9高考語(yǔ)文透析一題·詩(shī)歌鑒賞(手法技巧)《柳梢青 送盧梅坡 》
- 織金縣實(shí)興鄉(xiāng)白龍重晶石礦5.0萬(wàn)t-a(新建)項(xiàng)目環(huán)評(píng)報(bào)告
- 妊娠期肝內(nèi)膽汁淤積癥教學(xué)課件
- 如何高效學(xué)習(xí)學(xué)習(xí)通超星課后章節(jié)答案期末考試題庫(kù)2023年
評(píng)論
0/150
提交評(píng)論