《匯編語言程序設(shè)計(第2版)》第三章-匯編語言_第1頁
《匯編語言程序設(shè)計(第2版)》第三章-匯編語言_第2頁
《匯編語言程序設(shè)計(第2版)》第三章-匯編語言_第3頁
《匯編語言程序設(shè)計(第2版)》第三章-匯編語言_第4頁
《匯編語言程序設(shè)計(第2版)》第三章-匯編語言_第5頁
已閱讀5頁,還剩89頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

匯編語言程序設(shè)計(第2版)《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第1頁。

本章主要介紹匯編語句中操作數(shù)、操作符和運算符,偽指令和部分高級匯編語言,以及匯編語言程序的結(jié)構(gòu)。通過該章的學(xué)習(xí),讀者結(jié)合前面第二章的知識就能編寫簡單的匯編語言程序。3.1匯編語言語句3.2偽指令

3.3匯編語言程序的結(jié)構(gòu)

3.4高級匯編語言技術(shù)第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第2頁。3.1匯編語言語句3.1.1語句的類別與結(jié)構(gòu)

1.匯編語句的類別

匯編語言源程序由若干語句組成,通常,這些語句可以分為三類,它們是:1)指令語句2)宏指令語句3)偽指令語句返回本章首頁進入下一節(jié)第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第3頁。指令語句

匯編指令是用助記符表示的機器指令,所以這類語句又稱機器指令語句,它們由匯編程序匯編成相應(yīng)的能被CPU直接識別并執(zhí)行的目標(biāo)代碼,或稱機器代碼,例如:第二章中介紹過的MOV,SUB,CMP,XOR等指令均屬機器指令語句。返回本章首頁返回本節(jié)首頁第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第4頁。宏指令語句

在8088/8086和80X86系列的匯編語言中,允許用戶為多次重復(fù)使用的程序段命一個名字,然后就可以在程序中用這個名字代替該程序段,我們將定義的過程稱為宏定義,將該程序段稱為宏。宏的定義必須按相應(yīng)的規(guī)定進行,每個宏都有相應(yīng)的宏名。在程序的任意位置,若需要使用這段程序只要在相應(yīng)的位置使用宏名,即相當(dāng)于使用了這段程序。因此,宏指令語句就是宏的引用。宏的引用語句就是宏指令語句。匯編程序遇到宏指令語句時將它還原成一組機器指令。指令語句和宏指令語句都是指令性語句。返回本章首頁返回本節(jié)首頁第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第5頁。偽指令語句

偽指令語句是一種指示性語句,這類語句向匯編程序提供匯編過程要求的一些輔助信息,如給變量分配內(nèi)存單元地址、定義各種符號、實現(xiàn)分段等。返回本章首頁返回本節(jié)首頁第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第6頁。

偽指令與指令性語句的最大區(qū)別是:首先偽指令語句經(jīng)匯編后不產(chǎn)生任何機器代碼,而指令性語句經(jīng)匯編后會產(chǎn)生相應(yīng)的機器代碼;其次偽指令語句所指示的操作是在程序匯編時就完成了的,而指令性語句的操作必須在程序運行時才能完成。

例如,后面我們要介紹的數(shù)據(jù)定義偽指令DB,DW構(gòu)成的語句就屬于偽指令語句。

偽指令語句與指令性語句的區(qū)別第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第7頁。2.匯編語言的語句格式

匯編語言的3類語句可以用以下格式統(tǒng)一表示為:

[名字項]操作項[操作數(shù)][;注釋項]第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第8頁。

其中帶方括號的項表示可選項;名字項是用標(biāo)識符表示的符號;操作項是語句要進行某種操作的助記符;操作數(shù)項根據(jù)不同的語句,操作數(shù)項由零個、一個或者多個表達式組成,并由它提供執(zhí)行指定操作所需要的操作數(shù)或地址,當(dāng)操作數(shù)不止一個時,相互之間應(yīng)該用逗號隔開;注釋項必須以分號開頭,主要用來說明程序或重要語句的功能。注釋項也可單獨出現(xiàn)在程序的任何位置。

語句書寫時項與項之間必須用空格或(TAB)符分隔。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第9頁。(1)名字項

在三類語句中,名字項有不同的名稱和含義。名字項出現(xiàn)在指令語句或宏指令語句前時,稱該名字項為標(biāo)號且對應(yīng)的標(biāo)識符后面必須跟有冒號,標(biāo)號在匯編以后分配有地址。標(biāo)號又稱為符號地址,可作為轉(zhuǎn)移指令或子程序調(diào)用的目標(biāo)地址。若名字項出現(xiàn)在偽指令語句前,則該名字項稱為符號名,根據(jù)不同的偽指令,這些符號名又可分為變量名、符號常數(shù)名、子程序名或段名等。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第10頁。

名字項的書寫有嚴格的規(guī)定,它可使用下列字符:

字母A~Z、a~z

數(shù)字0~9

特殊符號?、·、@、-、$等

名字項的第一個字符不可以是數(shù)字,必須是字母或特殊字符,但是問號本身不能單獨作為名字,名字中如果用到‘·’,則必須是第一個字符。名字最多由31個字符組成,多則無效。

第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第11頁。

需要注意的是:名字不能使用匯編語言的專用保留字,寄存器名,8088/8086匯編語言中的指令助記符,偽指令名,表達式中使用的運算符和屬性運算符等均不能作為名字項,否則匯編是會給出錯誤信息;名字項在程序中不能重復(fù)定義。

第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第12頁。(2)操作項

操作項表示語句要實現(xiàn)的具體操作,可以是指令、宏指令、偽指令的助記符,操作項是匯編語句中不可缺少的部分。匯編程序?qū)ι鲜鋈愓Z句會作不同的處理。對指令語句,匯編程序會將它翻譯成二進制指令代碼;對于宏指令語句,匯編程序?qū)⑵湔归_,也就是用宏體替代原來的宏指令語句,并翻譯成機器指令;對于偽指令語句,匯編程序會按其指定的偽操作進行處理。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第13頁。(3)操作數(shù)項

操作數(shù)項根據(jù)不同的語句由一個或多個表達式組成,它給執(zhí)行的操作提供原始數(shù)據(jù)并指出結(jié)果數(shù)據(jù)存儲的位置。

操作數(shù)項的常見形式有:常數(shù)、寄存器、標(biāo)號、變量或表達式等。其中,表達式是由常數(shù)、變量、標(biāo)號通過操作數(shù)運算符連接而成的式子,需要注意的是:表達式的值是在匯編過程中計算出來的,根據(jù)表達式中的成份,計算出來的結(jié)果可能是操作數(shù)的地址值,也可能就是操作數(shù)。兩個以上的表達式之間要用逗號分開。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第14頁。(4)注釋項

注釋項主要用來說明程序或語句功能,增加程序的可讀性。對于較大的程序,注釋項更加重要。注釋項放在某一語句后,用來說明該語句的功能;注釋項放在某一段程序的開頭,用來說明下面該段程序的功能。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第15頁。3.1.2指令語句的操作數(shù)

操作數(shù)項的常見形式有:常數(shù)、寄存器、標(biāo)號、變量或表達式。1.常數(shù)

常數(shù)分為數(shù)值常數(shù)、字符串常數(shù)和符號常數(shù)。

數(shù)值常數(shù)可以是二、八、十、十六進制數(shù),使用時在這些常數(shù)后分別加不同的后綴來區(qū)別,我們在第一章中已有所介紹。要說明的一點是,當(dāng)操作數(shù)或地址使用十六進制數(shù)表示時,若數(shù)的最高位以字母A~F開頭,則必須在它前面加一個0,以避免和變量、標(biāo)號或寄存器名相混淆。例如MOVAL,AH與MOVAL,0AH執(zhí)行的結(jié)果是完全不同的,前一指令的源操作數(shù)采用寄存器尋址,后一指令的源操作數(shù)采用的是立即數(shù)尋址。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第16頁。

字符串常數(shù)是指用單引號括起來的一個字符或多個字符的序列。使用時可以在單引號內(nèi)寫字符序列,也可以直接在語句中寫字符的ASCII碼,但ASCII碼之間必須用逗號作分隔(此時不需要用單引號)。例如,MOVAH,’B’指令和MOVAH,42H指令是等價的。

符號常數(shù)一般在數(shù)據(jù)段中用EQU偽指令或“=”偽指令定義。程序中可以用符號名代表一個常數(shù)或表達式值,以增加程序的可讀性。符號常數(shù)經(jīng)常在表達式中使用,也可單獨作為操作數(shù)出現(xiàn)在語句中。在程序中要注意區(qū)分符號常數(shù)和變量的不同。

第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第17頁。2.變量

變量是一個數(shù)據(jù)存儲單元的名字,即數(shù)據(jù)存放地址的符號表示。變量一般是在除代碼段以外的其它段中用偽指令進行定義的,變量經(jīng)常作為操作數(shù)出現(xiàn)在各種語句中,定義變量實際上就是給變量分配內(nèi)存單元。變量有三種屬性:段屬性、偏移屬性和類型屬性。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第18頁。段屬性:表示變量所在段的起始地址。偏移屬性:表示變量在段內(nèi)的偏移地址,即從段的起始地址開始到變量所對應(yīng)的內(nèi)存單元之間的字節(jié)數(shù),用16位無符號表示偏移地址。

類型屬性:表示該變量能存放的數(shù)據(jù)長度,它與變量定義時使用的偽指令有關(guān)。長度為1個字節(jié)的變量,類型為BYTE,長度為2個字節(jié)的變量,類型為WORD等。注意:同一個標(biāo)號或變量的定義在一個程序中只允許一次,否則會出現(xiàn)重復(fù)定義錯誤。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第19頁。

標(biāo)號一般在代碼段中定義,出現(xiàn)在指令語句前面,后面跟冒號(:)與指令操作符分離,它表示指令的符號地址,指示匯編后該指令代碼在內(nèi)存中的位置。它也有三種屬性:段屬性、偏移屬性和類型屬性。

3.標(biāo)號段屬性:表示該標(biāo)號的段起始地址,且該地址一定是在CS段寄存器中。

偏移屬性:表示標(biāo)號在代碼段中的段內(nèi)偏移地址,是一個16位的無符號數(shù),表示從段起始地址開始到定義標(biāo)號的位置之間的距離(字節(jié)數(shù))。

類型屬性:表示該標(biāo)號是在本段內(nèi)引用,還是在其它段中引用。在段內(nèi)引用的標(biāo)號為NEAR屬性,在段外引用的標(biāo)號為FAR屬性。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第20頁。4.表達式

表達式是由常數(shù)、變量、標(biāo)號通過運算符或操作符連接而成的,它可以分為數(shù)值表達式和地址表達式。

數(shù)值表達式主要由算術(shù)運算符、關(guān)系運算符和邏輯運算符連接常數(shù)組成的有意義的式子,它的運算結(jié)果是數(shù)值常數(shù),只有大小,沒有屬性。

地址表達式是由變量、標(biāo)號、常數(shù)、寄存器(BP、BX、SI、DI)的內(nèi)容([…])和操作符組成的有意義的式子,它的運算結(jié)果不是一個單純的數(shù)值,總是和存儲器地址相聯(lián)系。單個變量、標(biāo)號、寄存器的內(nèi)容是地址表達式的特例,第二章介紹的各種存儲器尋址方式的匯編表示都屬于簡單的地址表達式。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第21頁。3.1.3指令語句中的運算符和操作符

在8086/8088匯編語言中,我們講數(shù)值表達式中進行算術(shù)運算的符號稱為運算符,為了以示區(qū)別我們將地址表達式中的運算符稱為操作符。運算符可分為:算術(shù)運算符、邏輯運算符、關(guān)系運算符;操作符可分為:數(shù)值回送操作符和屬性操作符。下面介紹各類運算符和操作符及使用方法。

第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第22頁。1.運算符(1)算術(shù)運算符算術(shù)運算符有+、-、*、/、MOD、右移SHR和左移SHL運算符。其中,+、-、*、/是最常用的運算符,要求參加運算的數(shù)(或地址)均為整數(shù),運算的結(jié)果也為整數(shù),除法運算的結(jié)果是商的整數(shù)部分。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第23頁。(2)邏輯運算符

邏輯運算符依次為NOT,AND,OR和XOR。邏輯運算是按位進行操作的,位與位之間沒有進位和借位,其結(jié)果認為整數(shù)常量。其中,NOT運算符是單操作數(shù)運算符,其余三個運算符是雙操作數(shù)運算符。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第24頁。(3)關(guān)系運算符關(guān)系運算符有六種,它們分別是:

EQ相等(Equal)

NE不等(Notequal)

LT小于(Less)

LE小于或等于(LessorEqual)

GT大于(Greater)

GE大于或等于(GreaterorEqual)

它們用于兩個表達式值的比較,表達式的值一定是常數(shù)或是同一段內(nèi)的偏移地址,比較的結(jié)果為邏輯值,關(guān)系成立,結(jié)果為真,用全“1”表示,即0FFFFH;關(guān)系部成立,結(jié)果為假用全“0”表示,即0。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第25頁。2.操作符(1)數(shù)值回送操作符

數(shù)值回送操作符有五種,這些操作符的運算對象必須是變量或標(biāo)號,其運算結(jié)果是變量或標(biāo)號的特征值(類型屬性值)或是它們對應(yīng)的內(nèi)存單元地址(段基址或段內(nèi)偏移地址)。

下面介紹五種數(shù)值回送操作符。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第26頁。①取偏移地址操作符OFFSET格式:OFFSET變量或標(biāo)號

功能:當(dāng)OFFSET操作符置于變量或標(biāo)號前時,匯編程序就自動計算出該變量或標(biāo)號在它段內(nèi)的偏移地址?!纠?.1】

MOVSI,OFFSETBUF

說明:匯編程序?qū)UF在數(shù)據(jù)段內(nèi)的偏移地址作為立即數(shù)送到SI中。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第27頁。②取段基址操作符SEG格式:SEG變量或標(biāo)號

功能:當(dāng)SEG操作符置于變量或符號前面時,匯編程序就回送變量或標(biāo)號所在段的段基址。例: MOVAX,SEGBUF

說明:若BUF是從存儲器的2000H地址處開始的一個數(shù)據(jù)段DATA中的變量,則該語句的功能是將變量BUF的段基址2000H作為立即數(shù)存放到AX寄存器第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第28頁。③取類型操作符TYPR格式:TYPE變量或標(biāo)號

功能:當(dāng)TYPE操作符置于變量前面時,匯編程序按TYPE操作符的功能,取得變量的類型數(shù)字,該數(shù)字表示該變量所分配的存儲單元(字節(jié))數(shù):即DB為1,DW為2,DD為4,DT為10。

當(dāng)TYPE操作符置于標(biāo)號前面時,匯編程序按其功能,返回標(biāo)號的類型屬性值;當(dāng)該標(biāo)號為NEAR屬性時,返回值為-1,標(biāo)號為FAR屬性時,返回值為-2。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第29頁?!纠?.2】

數(shù)據(jù)段中有如下定義:

DATADW75H,134H

執(zhí)行:

ADDSI,TYPEDATA

該語句在匯編后相當(dāng)于指令

ADDAI,2。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第30頁。④取變量所含的數(shù)據(jù)存儲單元個數(shù)操作符LENGTH格式:LENGTH變量

功能:LENGTH操作符只對變量起作用,它的取值根據(jù)定義該變量時,數(shù)據(jù)定義偽指令后面第一個表達式的形式而定。如果第一個表達式為重復(fù)子句“nDUP(表達式)”,則返回外層DUP操作符前面的重復(fù)因子n;如果為其它形式的表達式,則返回值為1。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第31頁?!纠?.3】

DATASEGMENT

A1 DB`ABCD`,5DUP(0)

A2 DW10DUP(1),1234H

A3 DW10,20DUP(?)

A4 DW5DUP(3DUP(2),5)

DATAENDS MOVAL,LENGTHA1

MOVCX,LENGTHA2

MOVBX,LENGTHA3

MOVDX,LENGTHA4 MOVAL,1

MOVCX,10

MOVBX,1

MOVDX,5上述四條指令在匯編后相當(dāng)于指令第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第32頁。⑤取變量所含的數(shù)據(jù)存儲區(qū)大小操作符SIZE格式:SIZE變量

功能:SIZE操作符僅對變量起作用,匯編程序用該操作符返回的值表示該變量所分配的總字節(jié)數(shù),此數(shù)的值是LENGTH變量*TYPE變量?!纠?.4】上例中的A2變量,若想知道它分配的總字節(jié)數(shù),可用下述指令表示:

MOVCX,SIZEA2

匯編后相當(dāng)于有指令:

MOVCX,20

即變量A2總共分配有20個字節(jié)數(shù)。

第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第33頁。(2)屬性修改操作符

屬性修改操作符主要用于臨時修改變量、標(biāo)號或某個內(nèi)存單元中的操作數(shù)的類型屬性,它們共有五種:①屬性定義操作符PTR格式:類型PTR地址表達式

功能:PTR操作符的作用是將地址表達式的原類型屬性臨時修改成PTR操作符前面所指定的類型或?qū)iT指定某操作數(shù)地址的類型。地址表達式的形式可以是標(biāo)號、變量或是用作地址偏移量的寄存器。指定的類型可以是BYTE、WORD或DWORD。

第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第34頁?!纠?.5】要將一個立即數(shù)20H存入以SI寄存器內(nèi)容所指定的內(nèi)存單元,那么SI所指向的單元是字節(jié)單元還是字單元,就可以使用PTR操作符加以說明。

MOVBYTEPTR[SI],

20H

或MOVWORDPTR[SI],20H

第一條指令表示將立即數(shù)20H送入EA=[SI]的字節(jié)存儲單元;第二條指令表示將立即數(shù)20H送入EA=[SI]的字存儲單元。注意:PTR操作符只在語句內(nèi)有效。

DUFDB12H,34H

MOVAX,WORDPTEDUF

上述傳送指令的源操作數(shù)由于使用了PTR操作符將DAB的類型屬性臨時修改成WORD類型,因此,執(zhí)行該指令時是取2個字節(jié)的數(shù)送給寄存器AX的。執(zhí)行完MOV指令后,DUF的字節(jié)屬性并未改變。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第35頁。②SHORT操作符格式:SHORT標(biāo)號

功能:SHORT操作符用來說明JMP指令中轉(zhuǎn)移地址的屬性是短屬性,即轉(zhuǎn)移的范圍比較小,其轉(zhuǎn)向地址是在JMP的下一條指令地址IP值上加上一個字節(jié)的偏移量,即轉(zhuǎn)移范圍在(IP)-128~(IP)+127之間。③THIS操作符格式:THIS屬性或類型

功能:指定下一個能分配的存儲單元的類型。THIS操作符和PTR操作符相似,它可以建立一個指定類型或指定距離的地址操作數(shù)。當(dāng)建立一個指定類型的地址操作數(shù)時,該操作數(shù)的段基址和段內(nèi)偏移地址與下一個存儲單元地址相同。它常與偽指令EQU或=等連用。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第36頁。例如:

NEWTYPE EQUTHISBYTE

WORETYPE DW10H,2356H

匯編后建立一個新的地址操作數(shù)NEWTYPE,它的段基址,段內(nèi)偏移地址和WORDTYPE相同,但NEWTYPE將緊跟其后的變量WORETYPE重新定義為字節(jié)類型的,而WORDTYPE是字類型。根據(jù)需要可以選擇其中的符號地址,取一個字節(jié)的數(shù)據(jù)用符號地址NEWTYPE,取一個字的數(shù)據(jù)用符號地址WORDTYPE。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第37頁。4)HIGH和LOW操作符格式:HIGT/LOW常數(shù)或地址表達式

功能:兩個操作符都是針對一個16位的數(shù)或地址表達式的,其中,HIGH操作符取其高位字節(jié),LOW操作符取其低位字節(jié)。例如:

CONST EQU1234H

MOV AH,HIGHCONST

MOV AL,LOWCONST

上述指令執(zhí)行后,AH寄存器值為12H,AL寄存器的值為34H。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第38頁。表3-1運算符的優(yōu)先順序返回本章首頁高低SHORTOR、XORANDNOTEQ、NE、LT、LE、GT、GE+、-*、/、MOD、SHL、SHRHIGH、LOWPTR、OFFSET、SEG、TYPE、THIS、段操作數(shù)(:)()、[]、LENGTH、SIZE、WIDTH和MASK運算符優(yōu)先級第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第39頁。3.2偽指令

前面我們介紹匯編語言語句除指令語句以外還有偽指令語句和宏指令語句,偽指令又稱偽操作,它不像機器指令那樣是在程序運行期間由計算機來執(zhí)行的,它是在匯編程序?qū)υ闯绦騾R編期間由匯編程序處理的操作,這們可以完成如數(shù)據(jù)定義、分配存儲區(qū)、指示程序結(jié)束等功能。進入下一節(jié)返回本章首頁返回上一節(jié)第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第40頁。3.2.1數(shù)據(jù)定義與符號定義偽指令1.數(shù)據(jù)定義偽指令格式:[變量名]數(shù)據(jù)定義偽指令操作數(shù)項表功能:定義以數(shù)據(jù)存儲區(qū),其類型有所使用的數(shù)據(jù)定義偽指令指定。說明:變量名(Variable)字段是可選項,它用符號地址表示,其作用與指令語句前的標(biāo)號相同,但它的后面不跟冒號。如果語句中有變量則匯編程序使其記以第一個字節(jié)的偏移地址。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第41頁。數(shù)據(jù)定義偽指令常用的有以下幾種:

DB偽指令定義字節(jié)類型,其后的每個操作數(shù)都占有一個字節(jié)。

DW偽指令用來定義字類型,其后的每個操作數(shù)都占有一個字,即2個字節(jié)(低位字節(jié)在第一個字節(jié)地址中,高位字節(jié)在第二個字節(jié)地址中)。DD偽指令用來定義雙字類型,其后的每個操作數(shù)占有二個字。

DQ偽指令用來定義四字類型,其后的每個操作占有四個字。

DT偽指令用來定義十字節(jié)類型(五個字),其后的每個操作數(shù)占有十個字節(jié),形成壓縮的BCD碼。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第42頁。

操作數(shù)字段可以是常數(shù)或表達式、字符串、?和帶DUP的表達式。

若是字符串且是DB類型時,必須以單引號括起來,括起來的字符個數(shù)不能超過255個,字符串以ASCII碼的形式按地址遞增的順序一次存放在以變量名開始的內(nèi)存單元中;

若是’?’時,表示偽變量預(yù)留內(nèi)存單元。例如:X1DB?;為變量X1預(yù)留1各字節(jié)單元

若是帶DUP的表達式表示定義多個相同的操作數(shù)和要預(yù)留多個內(nèi)存單元。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第43頁。DUP的使用格式如下:

表達式DUP(操作數(shù)項)

表達式為要重復(fù)的次數(shù);操作數(shù)表示要重復(fù)的內(nèi)容,可以是常數(shù)或表達式、字符串、?和帶DUP的表達式。例:A1DB10DUP(‘ABCD’);表示從A1開始重復(fù)定義10個字符串“ABCD” A2DW4DUP(3,5);表示從A2開始重復(fù)定義4個字“3,5”A3DB5DUP(3DUP(2),7);表示從A3開始重復(fù)定義5個數(shù)據(jù)系列“2,2,

;2,7”,共占20個字節(jié)單元第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第44頁。2.符號定義偽指令(1)賦值偽指令EQU

格式:變量名EQU表達式

功能:EQU偽指令將右邊表達式的值賦給左邊的變量。表達式可以是常數(shù)、變量、標(biāo)號、指令助記符、數(shù)值表達式、地址表達式。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第45頁。

當(dāng)表達式為常數(shù)或數(shù)值表達式時,賦值偽指令為符號常數(shù)定義偽指令,例:

COUNTEQU15 ;定義符號常數(shù)COUNT

當(dāng)表達式為地址表達式時,EQU為地址表達式賦以符號名,例如:

A1EQUHEIGHT+12 ;將EA為HEIGHT+12的地址賦以符號名A1

當(dāng)表達式為變量、標(biāo)號或指令助記符時,EQU為已定義的變量名、標(biāo)號或指令助記符另取一個“別名”。例如:

ALPHA EQUCOUNT;為變量COUNT另定義一個別名ALPHA

BETA EQUBEGIN;為標(biāo)號BEGIN另定義一個別名BETA

B EQU[BP+8];變址引用賦以符號名B

AD EQUADD ;為指令助記符定義別名AD第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第46頁。注意:在同一源程序中,同一符號不能用EQU偽指令重新定義,例如:

NUM EQUDAA

NUM EQU100H

是錯誤的定義。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第47頁。2.等號偽指令格式:變量名=表達式

功能:=偽指令與EQU類似,也可以作為賦值操作使用。這們之間的區(qū)別是EQU偽指令中的表達式名是不允許重復(fù)定義的,而=偽指令則允許重復(fù)定義;=偽指令不能偽指令助記符定義另一別名,EQU可以為指令助記符定義別名。除上述不同外,=與EQU的使用時完全相同的?!纠?.6】

EMP=7

EMP=EMP+1

是正確的,而AD=ADD是錯誤的定義。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第48頁。3.定義符號名偽指令LABEL格式:符號名LABEL類型

功能:定義一個標(biāo)號或變量名,并指定其類型。

【例3.7】

AB1 LABELFAR

AB2:

MOV AL,100

上述指令“MOVAL,100”有兩個段和偏移量屬性相同的標(biāo)號,即:AB1和AB2,但它們有不同的類型屬性,標(biāo)號AB1為FAR類型,標(biāo)號AB2為NEAR類型。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第49頁。3.2.2段定義偽指令1.段定義偽指令段定義偽指令的格式如下:段名SEGMENT[定位類型][組合類型][‘類別’]…段名ENDS

其中刪節(jié)號部分,對于數(shù)據(jù)段、附加段和堆棧段來說,一般是存儲單元的定義、分配等偽指令;對于代碼段則是指令及偽指令。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第50頁。①定位類型(align_type)可以是:

PARA指定段的起始地址必須從小段邊界開始,即段起始地址的最低的16進制數(shù)位必須為0。

BYTE該段可以從任何地址開始。

WORD該段必須從字的邊界開始,即段起始地址必須為偶數(shù)。

PAGE該段必須從頁的邊界開始,即段起始地址的最低兩個16進制數(shù)位必須為0(該地址能被256整除)。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第51頁。②組合類型(combine_type)可以是:

PUBLIC該段連接時將與有相同名字的其他分段連接在一起。其連接次序由連接命令指定。

COMMON該段在連接時與其他同名分段有相同的起始地址,所以會產(chǎn)生覆蓋。COMMON的連接長度是各分段中最大長度。

ATexpression使段的起始地址是表達式所計算出來的16位段地址。但它不能用來指定代碼段。

STACK指定該段在運行時為堆棧段的一部分。

MEMORY指定該將分配在所有其他連接在一起的段的前面(在高地址上),如果連接時有幾個指定MEMORY的段,則遇到的第一個段作為MEMORY段,其他段則作為COMMON段。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第52頁。③類別連接時用于組成段組的名字。

注意:SEGMENT和ENDS語句必須成對使用。而且在使用時,還可以使用簡化的段定義?!纠?.8】

;定義一數(shù)據(jù)段DATA

DATA SEGMENT

A DB‘1234’

B DW12H

DATAENDS第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第53頁。2.指定段址偽指令格式:

ASSUME段寄存器名:段名,段寄存器名:段名,...

功能:

ASSUME偽指令設(shè)定段和段寄存儲器的關(guān)系,其中段寄存器名必須是CS、DS、ES和SS中的一個,而段名必須是由SEGMENT定義的段名。

ASSUME偽指令只是指定某個段分配給哪一個段寄存器,它并沒有把段地址裝入段寄存器中,所以一般在代碼段伊始,還必須把段地址裝入相應(yīng)的段寄存器中。但是,代碼段和堆棧段不需要這樣做,寄存器CS,SS是由系統(tǒng)負責(zé)設(shè)置的。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第54頁?!纠?.9】

DATA1 SEGMENT

DATA1 ENDS

DATA2 SEGMENT

DATA2 ENDS

STACK SEGMENGSTACK

STACK ENDS

CODE SEGMENT

ASSUMECS:CODE,DS:DATA1,ES:DATA2,SS:STACK

BEGIN:MOV AX,DATA1

MOV DS,AX

MOV AX,DATA2

MOV ES,AX

CODE ENDS

ENDBEGIN第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第55頁。ASSUME NOTHING可取消前面由ASSUME所指定的段寄存器。例:

ASSUME DS:NOTHING

;取消DS與原數(shù)據(jù)段對應(yīng)關(guān)系

ASSUME DS:DATA3

;建立新的對應(yīng)關(guān)系第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第56頁。3.2.3模塊定義與通信偽指令1.模塊定義偽指令NAME/END

格式:NAME 模塊名

… END 標(biāo)號

功能:由NAME和END定義一個程序模塊。標(biāo)號為模塊執(zhí)行時程序的起始地址。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第57頁。說明:①如果程序中沒有NAME偽指令,則也可使用TITLE偽指令,其格式為:

TITLEtext

TITLE偽指令可指定每一頁上打印的標(biāo)題。同時,如果程序中沒有使用NAME偽指令,則匯編程序?qū)⒂胻ext中的前六個字符作為模塊名。text最多為60個字符。如果程序既無NAME又無TITLE偽指令,則將用源程序文件名作為模塊名。②當(dāng)NAME缺省時,END只表示源程序結(jié)束。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第58頁。2.模塊通信偽指令(1)定義公共符號名偽指令PUBLIC

格式:PUBLIC符號名

功能:由PUBLIC定義的符號名,可為其它模塊所引用,換句話說,由PUBLIC定義的符號名是公共符號名,可為外部模塊引用。

說明:符號名可以為變量、符號常量、標(biāo)號和過程名。

例如:PUBLICABC,ALFA第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第59頁。(2)定義外部符號名偽指令EXTRN格式:EXTRN符號名1:類型[,符號名2:類型,符號名3:類型]

功能:定義本模塊中將要引用的外部模塊中的符號名,該符號名已在其它模塊中被PUBLIC所定義。即由EXTRN偽指令定義的符號名是外部符號名,由外部模塊定義而由本模塊引用。

例如:EXTRNABC:BYTE第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第60頁。3.2.4過程定義偽指令格式:

過程名PROC屬性

RET

過程名ENDP

功能:過程定義偽指令用于定義子程序。其中過程名為標(biāo)識符,它又是子程序入口的符號地址,它的寫法與標(biāo)號的寫法相同。屬性是指類型屬性,它可以是NEAR或FAR段內(nèi)調(diào)用使用NEAR屬性,段間調(diào)用使用FAR屬性。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第61頁。3.2.5其它偽指令1.EVEN偽指令

格式:EVEN

功能:使下一個字節(jié)地址成為偶數(shù)。一個字的地址最好從偶地址開始,所以對于字數(shù)組為保證其從偶地址開始,可以在它前面用EVEN偽指令來達到這一目的。

【例3.10】

DATA SEGMENT

EVEN

WORDAYDW100DUP(?)

DATAENDS第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第62頁。2.ORG偽指令格式:ORG數(shù)值表達式

功能:ORG偽指令指定在它之后的程序段或數(shù)據(jù)塊所存放的起始地址的偏移量。

地址計數(shù)器的值可以用$來表示,即可用’$’來表示當(dāng)前地址,匯編語言允許用戶直接用$來引用當(dāng)前地址即地址計數(shù)器的值,

【例3.11】ORG0100H ;從偏移地址0100H處開始存放

ORG$+8 ;表示跳過8個字節(jié)的存儲區(qū)第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第63頁。3.3匯編語言程序的結(jié)構(gòu)3.3.1匯編語言程序的構(gòu)造匯編語言源程序經(jīng)匯編、連接后,按照生成不同的可執(zhí)行程序的形式,可以分為:生成exe可執(zhí)行程序的源程序格式和生成COM程序的源程序格式兩種。進入下一節(jié)返回本章首頁返回上一節(jié)第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第64頁。1.exe程序的匯編語言源程序格式附加段名SEGMENT

變量定義

數(shù)據(jù)空間預(yù)置

附加段名ENDS一般格式如下:NAME模塊名(可有可無)數(shù)據(jù)段名SEGMENT

變量定義

數(shù)據(jù)空間預(yù)置

數(shù)據(jù)段名ENDS第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第65頁。代碼段名SEGMENT

ASSUMECS:代碼段名,DS:數(shù)據(jù)段名, ES:附加段名,SS:堆棧段名

Start:指令1

指令2

指令n

代碼段名ENDS

ENDstart堆棧段名SEGMENTPARASTACK‘STACK’

堆棧段空間預(yù)置

堆棧段名ENDS第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第66頁。

①任何一個匯編語言源程序由若干段組成,最多有4個段:數(shù)據(jù)段、附加段、堆棧段和代碼段,前3個段將根據(jù)具體程序的需要可有可無,但程序至少有一個代碼段。各個段的定義由偽指令SEGMENT和ENDS來完成。說明:

②當(dāng)有變量定義或預(yù)置數(shù)據(jù)空間時,應(yīng)在數(shù)據(jù)段或附加段中進行定義。

③如果使用堆棧,用戶最好自己設(shè)置專用的堆??臻g,也可由系統(tǒng)自行分配堆??臻g。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第67頁。④代碼段中,用ASSUME指令指出各段寄存器與當(dāng)前被使用的邏輯段的對應(yīng)關(guān)系,但并不能把段地址裝入相應(yīng)的寄存器中,所以,在任何程序的開始,都要使用指令給DS、ES賦值:

MOVAX,數(shù)據(jù)段名

MOVDS,AS

;有數(shù)據(jù)段時,用這兩條命令將數(shù)據(jù)段首址放入DS

MOVAX,附加段名

MOVES,AX

;有附加數(shù)據(jù)段時,用這兩條命令將其段首址放入ES。⑤CS是系統(tǒng)在加載程序后由系統(tǒng)自動置入,不能使用如下指令:

MOVAX,代碼段名

MOVCS,AX第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第68頁。2.com程序的匯編語言源程序格式一般格式如下:

NAME模塊名(可有可無)

段名SEGMENT

ASSUME段寄存器地址說明

ORG100H

Start:JMPbegin

變量定義

數(shù)據(jù)空間預(yù)置

begin:指令1

指令2

指令n

段名ENDS

ENDstart第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第69頁。Com程序的源程序形式不允許分段(或者說:只有一個段),程序中用到的數(shù)據(jù)定義、存儲空間預(yù)置、堆棧區(qū)域以及程序代碼均在僅有的一個段內(nèi),程序開始運行的起點必須是100H,程序結(jié)束使用END。另外,為了符合編程的習(xí)慣,將變量定義和數(shù)據(jù)空間預(yù)置(相當(dāng)于EXE程序格式的數(shù)據(jù)段)放到了程序的前面并用JMP指令跳過(設(shè)置JMP指令是為了保證程序的入口地址100H),讀者也可以將其放到后面并去掉JMP指令。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第70頁。3.exe和com程序比較exe和com程序有如下不同:

1)exe程序分為1~4個段;com程序不允許分段。

2)exe程序的入口地址由系統(tǒng)自行安排;com程序的入口地址必須為100H。

3)exe程序每個段均可占用64KB的存儲空間(段與段也可以重疊使用),一個程序最多可分配256KB的存儲空間;com程序所占用的總空間不允許超過64KB。4)exe程序,用戶可以設(shè)置堆棧也可以不設(shè)置;com程序,用戶不必設(shè)置堆棧,在程序裝入時,由系統(tǒng)自動把SP建立在該段之末。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第71頁。com程序沒有exe程序所具有的包括有關(guān)文件信息的標(biāo)題區(qū)(header),因此,在64KB之內(nèi)和exe同樣大的程序,com程序的裝入速度比exe程序要快。此外,com程序不定期可以直接在調(diào)試程序debug中用a或e命令建立,對于一些短小的程序,這也是一種很方便的方法。

用戶在建立com源程序之后,同樣經(jīng)匯編、連接形成exe程序,然后可以通過exe2bin程序來建立com程序,方法如下:

c>exe2binexe程序名程序名.com第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第72頁。3.3.2程序正常返回DOS的方法程序的結(jié)束,可用以下4種方法之一返回DOS。

①功能調(diào)用4Ch

在程序的代碼段結(jié)束之前用下面兩條命令:

MOVAH,4Ch

INT21H

②一條INT20H指令

③用JMP0指令

④用功能調(diào)用00H

MOVAH,00H

INT21H第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第73頁?!纠?.12】將在顯示器上顯示“HOWAREYOU!”

STACK SEGMENTSTACK

DB 200DUP(0)

STACK ENDS

DATA SEGMENT

BUF DB‘HOWAREYOU!’

DATA ENDS

CODE SEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACK

BEGIN: MOV AX,DATA

MOV DS,AX

LEA DX,BUF

MOV AH,9

INT 21H;DOS功能調(diào)用,顯示DX指示的緩沖區(qū)的數(shù)據(jù)

MOV AH,4CH

INT 21H;DOS功能調(diào)用,結(jié)束程序返回DOS

CODE ENDS

ENDBEGIN返回本章首頁第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第74頁。3.4高級匯編語言技術(shù)3.4.1條件匯編

匯編程序能根據(jù)條件把一段源程序包括在匯編語言程序內(nèi)或者把它排除在外,這里就用到條件偽指令.條件偽指令的一般格式是:

IFXX<表達式>

{程序段1}

[ELSE]

{程序段2}

ENDIF返回本章首頁返回上一節(jié)進入下一節(jié)第3章匯編語言

功能:對程序有選擇的進行匯編。匯編時根據(jù)條件是否滿足,對某段程序進行匯編或不匯編?!秴R編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第75頁。說明:

①表達式的值表示條件,其值可為真(TRUE)或假(FLASE),當(dāng)它為真時執(zhí)行程序段1,否則,若有ELSE語句則執(zhí)行程序段2,若無ELSE語句就跳過ENDIF匯編以下的程序;ELSE及程序段2為可選項。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第76頁。②條件偽指令中的XX表示條件匯編的多種偽操作指令,常用XX有如下幾個:IF表達式匯編程序求出表達式的值,如此值不為0則滿足條件,執(zhí)行程序段1,否則跳過。

IFE表達式如求出表達式的值為0則滿足條件,執(zhí)行程序段1,否則跳過。

IFDEF符號如符號已在程序中定義,或者已用EXTRN偽指令說明該符號是在外部定義的,則滿足條件,執(zhí)行程序段1,否則跳過。

IFNDEF符號如符號未定義或未通過EXTRN說明為外部符號則滿足條件,執(zhí)行程序段1,否則跳過。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第77頁。IFB<參數(shù)>如參數(shù)為空則滿足條件,執(zhí)行程序段1,否則跳過。

IFNB<參數(shù)>如參數(shù)不為空則滿足條件,執(zhí)行程序段1,否則跳過。

IFIDN<參數(shù)1>,<參數(shù)2>如果字符串<參數(shù)1>和字符串<參數(shù)2>相同,則滿足條件,執(zhí)行程序段1,否則跳過。

IFDIF<參數(shù)1>,<參數(shù)2>如果字符串<參數(shù)1>和字符串<參數(shù)2>不相同,則滿足條件執(zhí)行程序段1,否則跳過。

在實際使用時,要根據(jù)情況對上述偽指令進行選用。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第78頁。 A EQU40H

IF A-40H

MOV CL,4

SAL AL,CL

ELSE

MOV CL,4

SAR AL,CL

ENDIF

M EQU100

IF MGT50

D1 DB100DUP(?)

ELSE

D2 DW100DUP(?)

ENDIF【例3.13】第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第79頁。3.4.2宏匯編

當(dāng)需要重復(fù)執(zhí)行的程序很短,或需要傳送的參數(shù)很多時,就可以使用宏匯編語句?!昂辍笔菂R編語言源程序中一段具有獨立功能的程序代碼,宏的使用是先定義后調(diào)用。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第80頁。1.宏定義與宏調(diào)用(1)宏定義

宏指令名MACRO[形式參數(shù)表]

宏體

ENDM第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第81頁。

①MACRO和ENDM是一必須成對出現(xiàn)的偽指令。這對偽指令之間的宏體是一組具有獨立功能的程序代碼。

②宏指令名給出該宏定義的名稱,調(diào)用時就使用宏指令名來調(diào)用該宏定義。宏指令名可以與偽指令、機器指令的助記符同名,但它具有比機器指令、偽指令更高的優(yōu)先權(quán)。

③形式參數(shù)表可有可無,它給出了該宏定義中所用到的形式參數(shù)(或稱虛參),每個形式參數(shù)之間用逗號隔開。形參個數(shù)不限,但字符個數(shù)不得超過132個。說明:第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第82頁。(2)宏調(diào)用

經(jīng)宏定義后的宏指令在源程序中的調(diào)用稱為宏調(diào)用。

宏調(diào)用的格式是:

宏指令名[實在參數(shù)表]

說明:①宏指令名必須與宏定義中的宏指令名一致;

②實在參數(shù)表中的實在參數(shù)(簡稱實參)必須與宏定義中的形參按位置一一對應(yīng),如果實參的個數(shù)多于形參的個數(shù)時,多余的實參被忽略;如果實參的個數(shù)少于形參的個數(shù)時,缺少的實參被處理為空白。實參可以和形參同名。第3章匯編語言《匯編語言程序設(shè)計(第2版)》第三章-匯編語言全文共94頁,當(dāng)前為第83頁。2.宏的使用宏定義的使用有

溫馨提示

  • 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

提交評論