第九章條件匯編與宏指令_第1頁
第九章條件匯編與宏指令_第2頁
第九章條件匯編與宏指令_第3頁
第九章條件匯編與宏指令_第4頁
第九章條件匯編與宏指令_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第九章條件匯編與宏指令9.1條件匯編偽操作9.2宏偽操作9.1條件匯編偽操作條件匯編偽操作允許用戶在編制匯編語言程序時規(guī)定某種條件,匯編程序在匯編過程中測試條件是否成立,當(dāng)條件成立時,則將某段匯編語言源程序匯編為目標(biāo)程序,否則,不進行匯編。

IBMPC宏匯編程序提供了十種條件匯編偽操作命令:IF,IFE,IF1,IF2,IFDEF,IFNDEF,IFB,IFNB,IFIDN,IFDIF。這些條件匯編偽操作命令的一般格式是:IFx [CONT]: ;條件塊:ENDIFIFx [CONT]: ;條件塊1ELSE: ;條件塊2ENDIF下面分別介紹十種條件匯編偽操作命令的功能:(1)IFCONT

當(dāng)條件表達式CONT的值不為零時,條件為真。(2)IFECONT

當(dāng)條件表達式CONT的值為零時,條件為真。(3)IF1

如果是第一遍掃描,條件為真。(4)IF2

如果是第二遍掃描,條件為真。(5)IFDEFCONT

此操作中的條件CONT是一個符號,如果該符號已經(jīng)定義,或已用EXTRN偽指令說明為外部標(biāo)號,則條件為真。(6)IFNDEFCONT

此操作中的條件CONT是一個符號,如果該符號未經(jīng)定義,并且也未經(jīng)EXTRN偽指令說明,則條件為真。(7)IFB<CONT>

如果尖括號中為空,則條件為真。(8)IFNB<CONT>

如果尖括號中不為空,則條件為真。(9)IFIDN<CHAR1>,<CHAR2>CHAR1和CHRA2為字符串,如果兩個字符串相同,則條件為真。(10)IFDIF<CHAR1>,<CHAR2>CHAR1和CHRA2為字符串,如果兩個字符串不同,則條件為真。例如:IFB<>條件為假,而IFB<>條件為真。

IFIDN<ABCD>,<‘ABCD’.>條件為假,IFIDN<ABCD><ABCD>條件為真。條件匯編偽操作命令舉例:ARG1 EQU 35HARG2 = NOT ARG1 IF (ARG1ORARG2)EQ0FFFFH MOV AX,ARG1 MOV BX,ARG2 ADD AX,BX IF (ARG1ANDARG2)EQ0FFFFH SUB AX,CX IFE ARG1 ADD AX,DX ENDIF MOV [SI],AX ENDIF MOV [DI],AX ENDIFMOV AX,0035HMOV BX,0FFCAHADD AX,BXMOV [DI],AX9.2宏偽操作9.2.1宏定義與宏結(jié)束偽操作命令1.宏定義的一般格式:

MNAME MACRO [形式參數(shù)表] : : 宏體

:

ENDM

2.宏調(diào)用與宏擴展在匯編語言源程序中,操作碼段上寫上宏名字,則稱為宏調(diào)用。宏調(diào)用的格式:

MNAME [實在參數(shù)表]匯編程序?qū)R編語言源程序進行匯編時,每當(dāng)在操作碼段遇到宏名字時,就用其相應(yīng)的宏體代替它,即將它所代表的宏體寫入宏名字的出現(xiàn)處,這個過程叫做宏擴展。在宏擴展時,用實在參數(shù)替代宏體中的形式參數(shù)。

用宏偽操作命令把在一個程序中要多次使用的功能程序段定義為一個名字,這個名字就可以當(dāng)作指令一樣使用,為與機器指令相區(qū)別,我們稱之為宏指令。例9.1定義數(shù)據(jù)塊傳送的宏指令

BLMOV MACRO SRC,DST,CNT LEA SI,SRC LEA DI,DST MOV CX,CNT CLD REPMOVSB ENDM有宏調(diào)用如下:BLMOV ADR1,ADR2,20宏擴展后,得到如下的程序段:

LEA SI,ADR1 LEA DI,ADR2 MOV CX,20 CLD REP MOVSB9.2.2參數(shù)的使用宏中的參數(shù)是非常靈活的,它可以用來表示用戶自定義的符號、數(shù)值、指令、寄存器名、任意字符串或子字符串及標(biāo)號等。

1.用參數(shù)代表自定義符號和數(shù)值例9.2定義將某存儲區(qū)清零的宏指令。CLEAR MACRO DIR,DST,CNT DIR LEA DI,DST MOV CX,CNT XOR AL,AL REP STOSB ENDM宏調(diào)用如下:CLEAR CLD,ADR1,80經(jīng)匯編后,擴展為:CLDLEA DI,ADR1MOV CX,80XOR AL,ALREP MOVSB2.用參數(shù)代表指令3.用參數(shù)代替寄存器名字例9.3定義將任一個寄存器循環(huán)左移或右移n位的宏指令。

RLS MACRO DIR,REG,CNT MOV CL,CNT RO&DIR REG,CL ENDM宏調(diào)用:

RLS R,AX,5宏擴展:

MOV CL,5 ROR AX,CL4.用參數(shù)代表任一字符串或子字符串例9.4定義兩個多精度數(shù)據(jù)求和的宏指令。MADD1 MACROLABEL,SRC,DST,LEN,SUN LEA SI,SRC LEA DI,DST LEA BX,SUN MOV CX,LEN CLCLABEL: MOV AL,[SI] ADC AL,[DI] MOV [BX],AL INC SI INC DI INC BX LOOP LABEL ENDM宏調(diào)用:MADD1 LOOP1,ADR3,ADR1,8,ADR2宏擴展為:

LEA SI,ADR3 LEA DI,ADR1 LEA BX,ADR2 MOV CX,8 CLCLOOP1: MOV AL,[SI] ADC AL,[DI] MOV [BX],AL INC SI INC DI INC BX LOOP LOOP19.2.3宏中的標(biāo)號處理1.把標(biāo)號定義為形式參數(shù)2.在宏定義中聲明標(biāo)號為局部標(biāo)號將標(biāo)號聲明為局部標(biāo)號須用局部標(biāo)號聲明偽指令LOCAL。格式如下:

LOCAL LAB1[,LAB2,…]

功能:LOCAL的作用就是要告訴匯編程序宏體中這些標(biāo)號是局部的。說明:LAB1,LAB2,…是宏體中出現(xiàn)的標(biāo)號。該語句必須是MACRO后的第一個語句,即MACRO和LOCAL之間不能有任何字符行。匯編程序在宏擴展時,將對宏體中的局部標(biāo)號產(chǎn)生唯一的標(biāo)號。例9.5定義求三個寄存器中最小數(shù)的宏指令。FMIN MACRO REG1,REG2,REG3 LOCAL NEXT1,NEXT2 CMP REG1,REG2 JNA NEXT1 MOV REG1,REG2NEXT1: CMP REG1,REG3 JNA NEXT2 MOV REG1,REG3NEXT2: NOP ENDM宏調(diào)用如下:

FMIN AX,BX,CX … FMIN DX,DI,SI宏擴展如下:

FMIN AX,BX,CX1 CMP AX,BX1 JNA ??00001 MOV AX,BX1 ??0000: CMP AX,CX1 JNA ??00011 MOV AX,CX1 ??0001: NOP MOV DX,3000H MOV DI,300H MOV SI,3400H FMIN DX,DI,SI1 CMP DX,DI1 JNA ??00021 MOV DX,DI1 ??0002: CMP DX,SI1 JNA ??00031 MOV DX,SI1 ??0003: NOP9.2.4宏嵌套宏嵌套有兩種形式:宏定義中嵌套宏定義和宏定義中嵌套宏調(diào)用,兩種宏嵌套的深度不限。

1.宏定義中嵌套宏定義形式如下:MAC1 MACRO …MAC2 MACRO …MAC3 MACRO … ENDM … ENDM … ENDM當(dāng)宏定義中嵌套宏定義時,必須首先調(diào)用最外層宏定義,然后才能調(diào)用內(nèi)層宏定義。下面是一個宏嵌套的例子。BHTOA1 MACRO MOV AH,ALAHHN MACRO LOACAL AHHN1 MOV CL,4 SHR AH,CL CMP AH,10 JC AHHN1 ADD AH,7AHHN1: ADD AH,30H ENDMALLN MACRO LOCAL ALLN1 AND AL,0FH CMP AL,10 JC ALLN1 ADD AL,7ALLN1: ADD AL,30H ENDM ENDM例9.6用嵌套的形式定義將AL中的數(shù)據(jù)轉(zhuǎn)換為兩個十六進制數(shù)的ASCII碼的宏指令。有如下宏調(diào)用:

BHTOA1 AHHN ALLN則宏擴展后得到如下程序段:

BHTOA11 MOV AH,AL AHHN1 MOV CL,41 SHR AH,CL1 CMP AH,101 JC ??00001 ADD AH,71 ??0000: ADD AH,30H ALLN1 AND AL,0FH1 CMP AL,101 JC ??00011 ADD AL,71 ??0001: ADD AL,30H

2.宏定義中嵌套宏調(diào)用形式如下:MACA MACRO … MACB … ENDMMACB MACRO … ENDM各宏定義可單獨調(diào)用。例9.7利用宏定義嵌套宏調(diào)用的形式,定義將AL中的數(shù)據(jù)轉(zhuǎn)換為兩位十六進制數(shù)的ASCII碼。宏定義如下:HTOA2 MACRO PUSH CX MOV CH,AL MOV CL,4 SHR AL,CL HTOA MOV AH,AL MOV AL,CH AND AL,0FH HTOA POP CX ENDMHTOA MACRO LOCAL HTOA1 AND AL,0FH CMP AL,10 JC HTOA1 ADD AL,7HTOA1: ADD AL,30H ENDM宏調(diào)用:BHTOA2宏擴展如下:

BHTOA21 PUSH CX1 MOV CH,AL1 MOV CL,41 SHR AL,CL2 AND AL,0FH2 CMP AL,102 JC ??00002 ADD AL,72 ??0000: ADD AL,30H1 MOV AH,AL1 MOV AL,CH1 AND AL,0FH2 AND AL,0FH2 CMP A

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論