




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第6章高級(jí)匯編語言技術(shù)一、宏匯編 宏定義是用一組偽操作來實(shí)現(xiàn)的。其格式是: macro_name MACRO dumny_parameter_list . (宏定義體) ENDM其中MACRO和ENDM是一對(duì)偽操作.這對(duì)偽操作之間是宏定義體-是一組獨(dú)立功能的程序代碼.宏指令名(macro_name)給出該宏定義的名稱,調(diào)用時(shí)就使用宏指令名來調(diào)用該宏定義.其中啞元表(dumny_parameter_list)給出了該宏定義中所用到的形式參數(shù)(或稱虛參),每個(gè)啞元之間用逗號(hào)隔開. 經(jīng)宏定義后的宏指令就可以在源程序中調(diào)用.這種對(duì)宏指令的調(diào)用稱為宏調(diào)用,宏調(diào)用的格式是: macro_name actu
2、al_parameter_list實(shí)元表(actual_parameter_list)中的每一項(xiàng)為實(shí)元,相互之間用逗號(hào)隔開.1.宏定義可以無變?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宏展開: + 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 .宏展開: . + JZ THERE . + JNZ HERE .4.&是一個(gè)操作符,它在宏定義體中可以作為啞元的前綴,展開時(shí)可以把&前后個(gè)符號(hào)合并而形成一個(gè)符號(hào),這個(gè)符號(hào)可以是操作碼,操作數(shù)或是一個(gè)字符串宏定義: PO MACRO P1 JMP TA&P1 ENDM宏調(diào)用: FO WORD_VAR宏展開: + 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宏展開: + MSG1 DB HELLO MR.TAYLOR6.宏指令名可以與指令助記符或偽操作名相同,在這種情況下,宏指令的優(yōu)先級(jí)最高,而同名的指令或偽操作就失效了.偽操作PURGE可以用來在適當(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)隔開.7.LOCAL偽操作的使用.宏定義體內(nèi)允許使用標(biāo)號(hào),如:宏定義: ABSOL MACRO OPER CMP OPER,O JGE NEXT NEG OPER NEXT: ENDM如果程序中多次調(diào)用該宏定義時(shí),展開后會(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)隔開.匯編程序?qū)OCAL偽操作的局部標(biāo)號(hào)表中的每一個(gè)局部標(biāo)號(hào)建立唯一的符號(hào)(用?0000?FFFF)以代替在展開中存在的每個(gè)局部標(biāo)號(hào).必須注意,LOCAL偽操作只能用在宏定義體
6、內(nèi),而且它必須是MACRO偽操作后的第一個(gè)語句,在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 .宏展開: . + 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宏展開: + 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而展開成: + PUSH AX + MOV AX,VAR1 + ADD AX,VAR2 + MOV
9、 VAR3,AX + POP AX10.這里再介紹一個(gè)宏定義的變?cè)惺褂玫膫尾僮?,它的格式是: %expression匯編程序把跟在%之后的表達(dá)式的值轉(zhuǎn)換成當(dāng)前基數(shù)下的數(shù),在展開期間,用這個(gè)數(shù)來取代啞元.宏定義: 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 .宏展開: . + MSG1 DB SYNTAX ERROR . +
10、MSG2 DB INVALID OPERAND .二、重復(fù)匯編 有時(shí)匯編語言程序需要連續(xù)地重復(fù)完全相同的或者幾乎完全相同的一組代碼,這時(shí)可使用重復(fù)匯編。1.重復(fù)偽操作其格式為: REPT expression . (重復(fù)塊) ENDM其中表達(dá)式的值用來確定重復(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)來取代,下一次取代下一項(xiàng),重復(fù)次數(shù)由自變量表中的自變量個(gè)數(shù)來確定.自變量表必須用尖括號(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類似,但自變量表必須是字符串.重復(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匯編后展開形成: + PUSH AX + PUSH BX + PUSH CX + PUSH DX三、條件匯編 匯編程序能根據(jù)條件把一段源程序包括在匯編語言程序內(nèi)或者把它排除在外,這里就用到條件偽操作.條件偽操作的一般格式是: IFXX argument . 自變量滿足給定條件匯編此塊 ELSE . 自變量不滿足給定條件匯編此塊 ENDIF自變量必須在匯編程序第一啟遍掃視后就成
14、為確定的數(shù)值.條件偽操作中的XX表示條件如下: IF expression 匯編程序求出表達(dá)式的值,如此值不為0則滿足條件. IFE expression 如求出表達(dá)式的值為0則滿足條件. IFDEF symbol 如符號(hào)已在程序中定義,或者已用EXTRN偽操作說明該符號(hào)是在外部定義的,則 滿足條件. IFNDEF symbol 如符號(hào)未定義或未通過EXTRN說明為外部符號(hào)則滿足條件. IFB 如自變量為空則滿足條件 IFNB 如自變量不為空則滿足條件 IFIDN , 如果字符串和字符串相同,則滿足條件. IFDIF , 如果字符串和字符串不相同,則滿足條件.條件偽操作可以用在宏定義體內(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宏展開: 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)生無條件轉(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 .宏展開: . + MOV AX,SUM + CMP AX,15 + JNZ LOOP . + JMP EXIT例3.宏定義可允許遞歸調(diào)用,此時(shí)條件偽操作可用來結(jié)束宏遞歸 宏指令POWER可以用來實(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宏展開: + SAL AX,1 + SAL A
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 化妝品購銷合同細(xì)則
- 企事業(yè)單位合同簽訂環(huán)節(jié)防詐騙標(biāo)語展示
- 商業(yè)變壓器租賃合同標(biāo)準(zhǔn)格式
- 廢棄礦山治理與修復(fù)工程承包合同
- 勞務(wù)派遣合同范本
- 1 春夏秋冬 教學(xué)設(shè)計(jì)-2024-2025學(xué)年統(tǒng)編版語文一年級(jí)下冊(cè)
- Module 4 Unit 1 Did you read them(教學(xué)設(shè)計(jì))-2023-2024學(xué)年外研版(一起)英語五年級(jí)下冊(cè)
- 制造業(yè)企業(yè)勞動(dòng)合同范本
- 度鋼管供應(yīng)合同范本
- 10《吃飯有講究》教學(xué)設(shè)計(jì)-2024-2025學(xué)年道德與法治一年級(jí)上冊(cè)統(tǒng)編版
- 第二單元整體研習(xí)+教學(xué)設(shè)計(jì) 統(tǒng)編版高中語文選擇性必修上冊(cè)
- 企業(yè)外部環(huán)境與內(nèi)部能力分析報(bào)告
- 病理科科科內(nèi)會(huì)診記錄
- 研發(fā)費(fèi)用加計(jì)扣除費(fèi)用PPT
- 小學(xué)生分享ppt課件-景區(qū)介紹《牛首山》
- 小學(xué)生主題班會(huì) 弘揚(yáng)航天精神 課件 (27張PPT)
- 石膏幾何體結(jié)構(gòu)素描教案
- 一、二年級(jí)小學(xué)民族團(tuán)結(jié)教案
- 新生兒早期基本保健課件
- 采礦學(xué)課程設(shè)計(jì)硯北煤礦新井設(shè)計(jì)全套圖紙
- 大型儲(chǔ)罐計(jì)算書
評(píng)論
0/150
提交評(píng)論