高級匯編語言技術(shù)_第1頁
高級匯編語言技術(shù)_第2頁
高級匯編語言技術(shù)_第3頁
高級匯編語言技術(shù)_第4頁
高級匯編語言技術(shù)_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

名周

朱世

K

摩A

鉆舟a

加a案

明塔亟掩

掩需博

富M

埔低招

M

S

X,囂

X

國嫣M歐

X雙世

板假假世脩

黑萊卓粱

熱陋竹

高級匯編語言技術(shù)

A宏指令

A宏指令的使用過程

A宏操作符

A局部符號偽指令LOCAL

A宏庫的使用

A重復(fù)匯編

>條件匯編

由宏指令

為了減少編程的工作量,通游采用兩種方法:

①將程序段編寫為獨(dú)立的子程序

②將程序段定義成宏

將具有一定功能,需多次重復(fù)使用,且比較短

的程序段定義成一條宏指令。

使用宏指令語句可以減少程序書寫錯誤,縮短

源程序長度,使源程序編寫像高級語言一樣清

晰、簡潔。使用宏庫后,可以提高編程效率。

宏指令的使用過程

A宏定義

A宏調(diào)用

A宏擴(kuò)展

宏定義

>帶參宏定義

宏指令名MACRO形參1,形參2,...

宏體

ENDM

>無參宏定義

宏指令MACRO

宏體

ENDM

宏定義

SUMMACRONUM],NUM2,RESULT

PUSHAX

MOVAX,NUM1

ADDAX,NUM2

MOVRESULT,AX

POPAX

ENDM

說明

M宏指令名是該宏定義的名稱。調(diào)用時使用宏

指令名對該宏定義進(jìn)行調(diào)用。

宏指令符合標(biāo)識符規(guī)定。宏指令名不能重復(fù),

但可以和源程序中的其他變量、標(biāo)號、指令、

偽指令名相同,在這種情況下宏指令的優(yōu)先級

最高。

MACRO必須與ENDM成對出現(xiàn)。MACRO標(biāo)識宏

定義的開始。

形參是可選項(xiàng),宏可以不帶參數(shù);帶參數(shù)時,

多個形參間用逗號分隔。形參的規(guī)定與對標(biāo)識

符的規(guī)定是一致的。

宏調(diào)用

宏指令名[實(shí)參1,實(shí)參2,.......]

華宏指令與子程序的區(qū)別

子程序調(diào)用由微處理器完成

宏指令調(diào)用在匯編過程中由匯編程序完成

子程序調(diào)用可以減小目標(biāo)程序的大小

A宏指令調(diào)用不能

宏擴(kuò)展

DisplaymacroBUF

LEADX,BUF

+LEADX,BUF1

MOVAH,9

+MOVAH,9

INT21H

+INT21H

Displayendm

I

I

I

+LEADX,BUF2

DisplayBUF1

I+MOVAH,9

I

I

+INT21H

DisplayBUF2

將兩個用壓縮的BCD碼表示的4位十進(jìn)制數(shù)

相加,結(jié)果存入RESULT單元中。

;對兩數(shù)相加功能進(jìn)行宏定義Macro,asm

BCDADDMACROVARX,VARY,RESULT

MOVAL,VARX

ADDAL,VARY

DAA;俅位相加、調(diào)整

MOVRESULT,AL

MOVAL,VARX+1

ADCAL,VARY+1

DAA;高位相加、調(diào)整

MOVRESULT+1,AL

ENDM

DATASEGMENT

AlDB30H,11H

A2DB79H,47H

A3DB2DUP(?)

BlDB32H,23H

B2DB71H,62H

B3DB2DUP(?)

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

START:

MOVAX,

MOVDS,

BCDADDA1,A2,A3

BCDADDB1,B2,B3

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

+MOVAL,Al

+ADDAL,A2

+DAA;低位本目力口、調(diào)整

+MOVA3,AL

+MOVAL,Al+1

+ADCAL,A2+1

+DAA;高位相力口、調(diào)整

+MOVA3+1,AL

+;對兩數(shù)相加功能進(jìn)行宏定義

+MOVAL,Bl

+ADDAL,B2

+DAA;低位相加、調(diào)整

+MOVB3,AL

+MOVAL,Bl+1

+ADCAL,B2+1

+DAA;高位相加、調(diào)整

+MOVB3+1,AL

形參和實(shí)參

■F定義中可以不帶任何形參,宏調(diào)用時不需提

供實(shí)參,宏展開后宏體中的所有指令不作修改

原樣插入到宏調(diào)用的宏指令處。

■形參可以是操作碼或操作數(shù)的一部分,但在宏

定義體中必須使用分隔符&,&在宏定義中可作

為形參的前綴,展開時把&前后的兩個符號連

接起來,形成操作碼、操作數(shù)或字符串。

將寄存器內(nèi)容移位的操作定義為宏指令,并

宏調(diào)用。設(shè)一個參數(shù)時,移位次數(shù)為參數(shù)CN:

SHIFTMACROCN

MOVCL,CN

SHLAX,CL

ENDM

宏調(diào)用時提供相應(yīng)的實(shí)參數(shù)值:

SHIFT4

設(shè)兩個參數(shù)時,參數(shù)為寄存器和移位次數(shù):

SHIFTMACROCN,R

MOVCL,CN

SHLR,CL

ENDM

宏調(diào)用提供移位次數(shù)和寄存器:

SHIFT4,al

宏定義:

SHIFTMARCOX,Y,Z

MOVCL,X

S&ZY,CL

ENDM

上例被調(diào)用時:SHIFT4,AL,CL

SHIFT6,BX,AR

則宏展開時的目標(biāo)代碼:+MOVCL,4

+SALAL,CL

+MOVCL,6

+SARBX,CL

在程序設(shè)計中,對堆棧段的定義語句基本相同,只是

堆棧段的長度和初值不同。所以可以先定義一個宏

(放在宏庫中),供隨時不用,為編程帶來很大方

便。宏定義如下:

MSTACKMACROXYZ

STACKSEGMENTSTACK

DBXYZ

STACKENDS

ENDM

宏調(diào)用時:MSTACK<100DUP(?)>

宏展開為:+STACKSEGMENTSTACK

+DB100DUP(?)

+STACKENDS

偽指令PURGE

■宏指令名可以和源程序中的其他變量名、

標(biāo)號、指令助記符、偽操作名相同,此時宏指

令的優(yōu)先級別最高,使其他同名的指令或偽操

作無效。

PURGE,用來在適當(dāng)?shù)臅r候取消宏定義。

PURGE偽指令的一般格式是:

PURGE宏定義名[,…]

方括號表示PURGE可以取消多個宏定義,宏名之

間用逗號隔開。

偽指令PURGE

SUBMACROVARX,VARY,RESULT

I

I

I

ENDM

宏調(diào)用:SUBX,Y,Z

PURGESUB

“PURGESUB”語句后的SUB恢復(fù)減法功能。

偽指令LOCAL

使用了標(biāo)號的宏定義,若多次調(diào)用,勢必產(chǎn)生標(biāo)號

的多重定義。解決這一問題可使用偽指令LOCAL,

其一般格式為:

LOCAL局部標(biāo)號1,局部標(biāo)號2,...

宏匯編程序?qū)闃?biāo)號分別生成格式為“??

XXXX”的唯一的符號以代替各局部標(biāo)號。XXXX代表

四位十六進(jìn)制數(shù)0000~FFFF。這樣,在匯編源程序

中,避免了多次宏調(diào)用時生成的標(biāo)號重復(fù)。

?注意:LOCAL偽操作只能用在宏定義體內(nèi),而且必

須是MACRO偽操作后的第一個語句,在MACRO與

LOCAL不能出現(xiàn)注釋和分號標(biāo)志。

知吝取絕對值的宏指令如下

(macro2.asm):

宏展開后的指令為:

ABSMACROOPS+CMPCX,0

LOCALPLUS+JGE??0000

CMPOPS,0+NEGCX

JGEPLUS+??0000:MOVAX,CX

NEGOPS

PLUS:MOVAX,OPS

ENDMMOVBX,AX

宏調(diào)用:+CMPDX,0

ABSCX+JGE??0001

MOVBX,AX+NEGDX

ABSDX+??0001:MOVAX,DX

重復(fù)匯編

數(shù)值重復(fù)語句格式REPT

參數(shù)值重復(fù)語句格式IRP

字符重復(fù)語句格式IRPC

"數(shù)值重復(fù)語句格式REPT

ill______________________

矍一般格式為:

REPT表達(dá)式

;(重復(fù)塊)

ENDM

其中,REPT和ENDM必須成對出現(xiàn),兩者間的重

復(fù)塊是要重復(fù)匯編的部分。表達(dá)式的值用來表

示重復(fù)塊的重復(fù)匯編次數(shù)。這種偽操作不一定

要用在宏定義體內(nèi)。

有下列語句:macrol.asm

NUM=0

REPT10

NUM=NUM+1

DBNUM

ENDM

匯編后,將數(shù)據(jù)1,2,3,…,10分配給

十個連續(xù)的字節(jié)單元:

+DB1

+DB2

+DB3

I

I

I

+DB10

、:參數(shù)值重復(fù)語句格式IRP

其一般格式為:

IRP形參,〈參數(shù)1,參數(shù)2,...>

:(重復(fù)塊)

ENDM

此偽指令重復(fù)執(zhí)行重復(fù)塊中所包含的語句,

重復(fù)的次數(shù)由參數(shù)表中的參數(shù)個數(shù)決定。重復(fù)

匯編時,依次用參數(shù)表中的參數(shù)取代形參,直

到表中的參數(shù)用完為止。參數(shù)表中的參數(shù)必須

用兩個三角號括起來,參數(shù)可以是常數(shù)、符號、

字符串等,各參數(shù)間用逗號隔開。

多次將AX、BX、CX、DX寄存器內(nèi)容壓棧,宏

定義如下:macrol2.asm

PUSHRMACRO

IRPREG,<AX,BX,CX,DX>

PUSHREG

ENDM

ENDM

匯編后:

+PUSHAX

+PUSHBX

+PUSHCX

+PUSHDX

字符重復(fù)語句格式IRPC

TKPC形參,字符串(或〈字符串〉)

;(重復(fù)塊)

ENDM

此偽指令重復(fù)執(zhí)行重復(fù)塊中的語句,重

復(fù)匯編的次數(shù)等于字符串中字符的個數(shù)。每

次重復(fù)執(zhí)行時,依次用字符串中的一個字符

取代形參,直到字符串結(jié)束??梢奍RPC偽指

令與IRP偽指令類似,只是IRPC用字符串(其

三角括號可以有也可以無)代替了IRP偽指令

中的參數(shù)表。

PUSHRMACRO

IRPCREG,ABCD

PUSHREG&X

ENDM

ENDM

同樣,匯編后也可得到:

+PUSHAX

+PUSHBX

+PUSHCX

+PUSHDX

宏庫的使用

語句格式:INCLUDE庫文件名

假設(shè)已建立一名為MACRO.LIB的宏庫,其內(nèi)容如下

INPUTMACROA

LEADX,A

MOVAH,10;10號系統(tǒng)功能調(diào)用

INT21H

ENDM

PRINTMACROA

LEADX,A

MOVAH,9;9號系統(tǒng)功能調(diào)用

INT21H

ENDM

RETURNMACRO

MOVAH,2

MOVDL,OAH

INT21H

MOVDL,ODH;回車換行

INT21H

ENDM

0UT2MACROA

MOVDL,A

MOVAH,2;2號系統(tǒng)功能調(diào)用

INT21H

ENDM

STACKOMACROA

STACKSEGMENTSTACK

DBA

STACKENDS

ENDM

現(xiàn)要從鍵盤輸入一串字符到系統(tǒng)

緩沖區(qū),然后將字符按相反順序

打印,采用調(diào)用宏庫的辦法,其

程序如下:macro21

INCLUDEMACRO.LIB

STACKO<200DUP(0)〉;定義堆棧段

DATASEGMENT

INF01DB6INPUTSTRING:$'

INF02DB6OUTPUTSTRING:$'

BUFADB81

DB9?

DB80DUP(0)

BUFBDB81DUP(0)

DATAENDS

CODESEGMENT

ASSUMEDS:DATA,SS:STACK,CS:

CODE

START:MOVAX,DATA

MOVDS,AX

RETURN;輸出回車換行

PRINTINFO1;輸出INFO1代表的字符串

INPUTBUFA;鍵盤輸入字符中到緩沖區(qū);

LEASI,BUFA+1

MOVCH,0

MOVCL,[SI]

ADDSI,CX

LEADI,BUFB

NEXT:MOVAL,[SI]

MOV[DI],AL

DECSI

INCDI

LOOPNEXT

MOVBYTEPTR[DI],

RETURN;輸出回車換行

PRINTINF02;輸出的字符串變量INF02代表

PRINTBUFB;反向輸出輸入字符串

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

條件匯編

條件匯編指在匯編期間,宏匯編程序根據(jù)條

件是否成立決定具體匯編哪一程序段。條件

匯編用條件匯編偽指令來定義。

語句格式:

IFxx表達(dá)式

條件塊]

[ELSE

條件塊2]

ENDIF

偽指令"匯編條件,

IF表達(dá)式。表達(dá)拼0,則條件為其a

IFE表達(dá)卻表達(dá)式4則條件為露

是第一次掃翻臭

聯(lián)二次掃描為比

IFDE.F符號*符號已定義或被說明為外部符號,

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論