IBM—PC匯編語(yǔ)言程序設(shè)計(jì)(第二版)沈美明——第七章_第1頁(yè)
IBM—PC匯編語(yǔ)言程序設(shè)計(jì)(第二版)沈美明——第七章_第2頁(yè)
IBM—PC匯編語(yǔ)言程序設(shè)計(jì)(第二版)沈美明——第七章_第3頁(yè)
IBM—PC匯編語(yǔ)言程序設(shè)計(jì)(第二版)沈美明——第七章_第4頁(yè)
IBM—PC匯編語(yǔ)言程序設(shè)計(jì)(第二版)沈美明——第七章_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1 宏宏匯編匯編 重復(fù)匯編重復(fù)匯編 條件匯編條件匯編第七章第七章 高級(jí)匯編語(yǔ)言技術(shù)高級(jí)匯編語(yǔ)言技術(shù)21. 宏匯編宏匯編 宏宏:源程序中一段有獨(dú)立功能的程序代碼。源程序中一段有獨(dú)立功能的程序代碼。宏指令宏指令:用戶自定義的指令。在編程時(shí),將多次用戶自定義的指令。在編程時(shí),將多次 使用的功能用一條宏指令來(lái)代替。使用的功能用一條宏指令來(lái)代替。 匯編語(yǔ)言程序匯編語(yǔ)言程序指令指令偽指令(偽操作)偽指令(偽操作)宏指令宏指令3優(yōu):優(yōu):模塊化模塊化 省內(nèi)存省內(nèi)存缺:缺:開(kāi)銷大開(kāi)銷大宏定義:宏定義:Q macro x,y endm主程序:主程序:Q a, bQ c, dQ e, f目標(biāo)程序:目標(biāo)程序:優(yōu):優(yōu):

2、參數(shù)傳送參數(shù)傳送簡(jiǎn)單,執(zhí)簡(jiǎn)單,執(zhí)行效率高行效率高缺:缺:占用內(nèi)存占用內(nèi)存空間大空間大主程序:主程序:CALL -CALL -CALL -子程序:子程序: RET4宏展開(kāi):宏展開(kāi):匯編程序把匯編程序把宏調(diào)用宏調(diào)用展開(kāi)展開(kāi) 宏定義體宏定義體 復(fù)制到宏指令位置復(fù)制到宏指令位置, ,實(shí)參代虛參實(shí)參代虛參 LOCALLOCAL中的標(biāo)號(hào)中的標(biāo)號(hào) ?0000?0000?ffff?ffff宏定義:宏定義: macro_name macro_name MACROMACRO 啞元表啞元表 ; 形參/虛參 LOCAL LOCAL 標(biāo)號(hào)表標(biāo)號(hào)表 ; 宏定義體 ENDMENDM宏調(diào)用:宏調(diào)用: (必須先定義后調(diào)用)(必

3、須先定義后調(diào)用) macro_name macro_name 實(shí)元表實(shí)元表 ; 實(shí)參5例:保存寄存器例:保存寄存器宏展開(kāi):宏展開(kāi):1 push ax1 push ax1 push bx1 push bx1 push cx1 push cx1 push dx1 push dx1 push si1 push si1 push di1 push di宏定義:宏定義: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

4、di ENDMENDM宏調(diào)用:宏調(diào)用: saveregsavereg6例:兩個(gè)字相乘例:兩個(gè)字相乘宏定義:宏定義:multiply MACRO opr1,opr2,result push dx push ax mov ax,opr1 imul opr2 mov result,ax pop ax pop dx ENDM宏調(diào)用:宏調(diào)用: multiply cx,var,xyzbx宏展開(kāi):宏展開(kāi):1 push dx1 push ax1 mov ax,cx1 imul var1 mov xyzbx,ax1 pop ax1 pop dx7例:求絕對(duì)值例:求絕對(duì)值宏定義:宏定義:absol MACRO o

5、per LOCAL nextLOCAL next cmp oper,0 jge nextnext neg opernext:next: ENDM宏調(diào)用:宏調(diào)用:absol varabsol bx宏展開(kāi):宏展開(kāi): 1 cmp var,01 jge ?00001 neg var1 ?0000: 1 cmp bx,01 jge ?00011 neg bx1 ?0001: 8宏匯編操作符:宏匯編操作符: & ; %符號(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)。; 注釋注釋 宏展開(kāi)時(shí),宏展開(kāi)時(shí),;后面的注釋不予展開(kāi)。后面的注釋不予展開(kāi)。 %

6、 表達(dá)式表達(dá)式 匯編程序?qū)R編程序?qū)?后面的表達(dá)式轉(zhuǎn)換為數(shù)字,并在后面的表達(dá)式轉(zhuǎn)換為數(shù)字,并在展開(kāi)期間用這個(gè)數(shù)取代啞元。展開(kāi)期間用這個(gè)數(shù)取代啞元。9leap macro cond,lab j&cond lab endm宏定義:宏定義:宏調(diào)用:宏調(diào)用:leap z, thereleap nz, here宏展開(kāi):宏展開(kāi):1 jz there 1 jnz here10宏定義:宏定義:msg macro lab,num,xyz lab&num db HELLO MR.&xyz endm宏調(diào)用:宏調(diào)用:msg ary,1,wangmsg ary,2,zhang 宏展開(kāi):宏展開(kāi):1 ary1 db HEL

7、LO MR.wang 1 ary2 db HELLO MR.zhang 11例:定義宏指令例:定義宏指令STRG,實(shí)現(xiàn)存儲(chǔ)字符串的功能,實(shí)現(xiàn)存儲(chǔ)字符串的功能宏定義:宏定義: STRG MACRO STRING DB &STRING& ENDM宏調(diào)用宏調(diào)用: STRG 251 STRG % 25 1宏展開(kāi):宏展開(kāi): 1 DB 251 1 DB 2412宏定義:宏定義:msg macro count,string msg&count db string endmerrmsg macro text cntr = cntr+1 msg %cntr,text endm宏調(diào)用:宏調(diào)用:cntr=0errm

8、sg SYNTAX ERRORerrmsg INVALID OPERAND 宏展開(kāi):宏展開(kāi):1 cntr = cntr+11 msg %cntr,SYNTAX ERROR2 msg1 db SYNTAX ERROR 1 cntr = cntr+11 msg %cntr,INVALID OPERAND2 msg2 db INVALID OPERAND 13列表偽操作:列表偽操作:.LALL :在在LST清單中列出宏展開(kāi)后的全部清單中列出宏展開(kāi)后的全部 語(yǔ)句語(yǔ)句( (包括注釋包括注釋) )。.SALL :在在LST清單中不列出任何宏展開(kāi)后的清單中不列出任何宏展開(kāi)后的 語(yǔ)句。語(yǔ)句。.XALL :缺省

9、的列表方式,只列出宏體中產(chǎn)生缺省的列表方式,只列出宏體中產(chǎn)生 目標(biāo)代碼的語(yǔ)句。目標(biāo)代碼的語(yǔ)句。14starter macro csname, dsnameassume cs:csname, ds:dsname, es:dsname push ds sub ax, ax push ax mov ax, dsname mov ds, ax mov es, ax endm宏調(diào)用:. xallstarter code, data1 push ds1 sub ax, ax1 push ax1 mov ax, data1 mov ds, ax1 mov es, ax15建立宏庫(kù):建立宏庫(kù):macro1 M

10、ACRO 啞元表 ENDM macro2 MACRO 啞元表 ENDM macroN MACRO 啞元表 ENDMEDIT EXP.ASMEDIT EXP.ASMinclude include MACRO.MACMACRO.MACmacro1 實(shí)元表macro2 實(shí)元表macroN 實(shí)元表purge macroNEDIT MACRO . MAC調(diào)用宏庫(kù):調(diào)用宏庫(kù):16重復(fù)偽操作重復(fù)偽操作 REPTREPTREPTREPT 表達(dá)式表達(dá)式 ;重復(fù)塊ENDMENDM2. 重復(fù)匯編重復(fù)匯編用于連續(xù)產(chǎn)生完全相同或基本相同的一組代碼。用于連續(xù)產(chǎn)生完全相同或基本相同的一組代碼。不定不定重復(fù)偽操作重復(fù)偽操作

11、IRPIRP/ /IRPCIRPCIRPIRP 啞元啞元, ;重復(fù)塊ENDMENDMIRPCIRPC 啞元啞元,字符串,字符串 ;重復(fù)塊ENDMENDM17例:例:把字符把字符AA到到ZZ的的ASCIIASCII碼填入數(shù)組碼填入數(shù)組TABLETABLECHAR = ACHAR = ATABLE LABEL BYTETABLE LABEL BYTE REPTREPT 26 26 DB CHAR DB CHARCHAR = CHAR+1CHAR = CHAR+1 ENDMENDM1 DB 41H1 DB 41H1 DB 42H1 DB 42H1 DB 43H1 DB 43H 1 DB 5AH1 D

12、B 5AH匯編后:匯編后:18例:產(chǎn)生一組指令,將字?jǐn)?shù)組例:產(chǎn)生一組指令,將字?jǐn)?shù)組TABTAB的內(nèi)容入棧保存的內(nèi)容入棧保存; 宏定義PUSH_TAB PUSH_TAB MACROMACRO K K PUSH TAB+k PUSH TAB+k ENDMENDM; 宏調(diào)用I=0I=0 REPTREPT 5 5 PUSH_TAB %I PUSH_TAB %II=I+2I=I+2 ENDMENDM; 宏展開(kāi)2 PUSH TAB+02 PUSH TAB+02 PUSH TAB+22 PUSH TAB+22 PUSH TAB+42 PUSH TAB+42 PUSH TAB+62 PUSH TAB+62 P

13、USH TAB+82 PUSH TAB+819例:建立例:建立ARRAYARRAY數(shù)組數(shù)組.lall.lallARRAY LABEL WORDARRAY LABEL WORD REPTREPT 7 7 DW $+2 DW $+2 ENDMENDM DW ARRAYDW ARRAYARRAY LABEL WORDARRAY LABEL WORD1 DW $+21 DW $+21 DW $+21 DW $+21 DW $+21 DW $+21 DW $+21 DW $+21 DW $+21 DW $+21 DW $+21 DW $+21 DW $+21 DW $+2 DW ARRAY DW ARR

14、AY匯編后:匯編后:20IRPIRP REG, REG, PUSH REG PUSH REGENDMENDM1 PUSH AX1 PUSH AX1 PUSH BX1 PUSH BX1 PUSH CX1 PUSH CX1 PUSH DX1 PUSH DX匯編后:匯編后:例:例:生成一組入棧指令生成一組入棧指令匯編后:匯編后:array label bytearray label byteIRPCIRPC K, 12345 K, 12345db NO.&Kdb NO.&KENDMENDM1 db NO.11 db NO.11 db NO.21 db NO.21 db NO.31 db NO.31

15、db NO.41 db NO.41 db NO.51 db NO.5例:生成存儲(chǔ)字符串的匯編語(yǔ)句例:生成存儲(chǔ)字符串的匯編語(yǔ)句213. 條件匯編條件匯編 根據(jù)根據(jù)條件條件把一段源程序包括在匯編語(yǔ)言程序內(nèi)把一段源程序包括在匯編語(yǔ)言程序內(nèi)或者排除在外。或者排除在外。IFIF 自變量自變量 ; 為條件 ; 自變量滿足條件則匯編此塊 ELSEELSE ; 自變量不滿足條件則匯編此塊ENDIFENDIF一般一般格式:格式:22IF IF 表達(dá)式表達(dá)式 ;表達(dá)式表達(dá)式0,則匯編IFE IFE 表達(dá)式表達(dá)式 ;表達(dá)式0,則匯編IF1IF1 ;在第一遍掃視期間滿足條件IF2IF2 ;在第二遍掃視期間滿足條件IF

16、DEF IFDEF 符號(hào)符號(hào) ;符號(hào)已定義,則匯編IFNDEF IFNDEF 符號(hào)符號(hào) ;符號(hào)未定義,則匯編IFB IFB ;自變量為空,則匯編IFNB IFNB ;自變量不為空,則匯編IFIDN IFIDN ,2 ;串1與串2相同IFDIF IFDIF ,2 ;串1與串2不同23例:求最大值放入例:求最大值放入AX宏定義宏定義:MAX MAX MACROMACRO K,A,B,C K,A,B,C LOCAL NEXT,OUT LOCAL NEXT,OUT MOV AX, A MOV AX, A IFIF K-1 K-1 IFIF K-2 K-2 CMP C, AX CMP C, AX JLE

17、 NEXT JLE NEXT MOV AX, C MOV AX, C ENDIFENDIFNEXT: CMP B, AXNEXT: CMP B, AX JLE OUT JLE OUT MOV AX, B MOV AX, B ENDIFENDIFOUT:OUT: ENDMENDM1 MOV AX, P1 MOV AX, P1 ?0002: CMP Q, AX1 ?0002: CMP Q, AX1 JLE ?00031 JLE ?00031 MOV AX, Q1 MOV AX, Q1 ?0003:1 ?0003:宏展開(kāi)宏展開(kāi):1 MOV AX, P1 MOV AX, P1 ?0001: 1 ?00

18、01: 1 MOV AX, P1 MOV AX, P1 CMP R, AX1 CMP R, AX1 JLE ?00041 JLE ?00041 MOV AX, R1 MOV AX, R1 ?0004: CMP Q, AX1 ?0004: CMP Q, AX1 JLE ?00051 JLE ?00051 MOV AX, Q1 MOV AX, Q1 ?0005:1 ?0005:宏調(diào)用宏調(diào)用:MAX 1, PMAX 1, PMAX 2, P, QMAX 2, P, QMAX 3, P, Q, RMAX 3, P, Q, R24; 宏展開(kāi)1 SAL AX, 11 SAL AX, 12 SAL AX, 12 SAL AX, 13 SAL AX, 13 SAL AX, 1例:宏定義的遞歸調(diào)用例:宏定義的遞歸調(diào)用: : POWERPOWER實(shí)現(xiàn)實(shí)現(xiàn) ( X ( X * * 2 2N N ) ); 宏定義POWERPOWER MACROMACRO X, N X, N SAL X

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論