MASM有豐富的偽指令。必須搞清這些偽指令的功能及用法,才能編寫出高質(zhì)量的匯編語言源程序。
MASM的偽指令可分為變量定義語句、符號(hào)定義語句、段定義語句、段分配語句、過程定義語句、群定義語句、結(jié)構(gòu)定義語句、記錄定義語句等。
本節(jié)重點(diǎn)討論前五種偽指令語句,這些語句在程序中比較重要,使用頻繁。
4.3.1 變量定義語句
變量定義語句用來定義字節(jié)、字或雙字等變量。變量定義語句有兩種不同的格式。
1.格式1
[變量名]DB/DW/DD/DF/DQ/DT表達(dá)式
功能:為變量分配1個(gè)字節(jié)/字/雙字/長字/四字/十字節(jié)的存儲(chǔ)單元,并給它們賦值。格式1又可分為以下幾種具體用法:
2.格式2
格式2用于定義重復(fù)變量。
4.3.2 符號(hào)定義語句
編制源程序時(shí),經(jīng)常將常數(shù)或表達(dá)式等用一特定符號(hào)表示,這時(shí)需要用符號(hào)定義語句。符號(hào)定義語句不占用內(nèi)存,有兩種基本格式。
1.等值語句(EQU)
格式:符號(hào)EQU表達(dá)式
功能:將表達(dá)式的值賦給EQU左邊的符號(hào)。
例如:COUNT EQU 5;COUNT等于5
NUMEQU 13+6-2;NUM等于表達(dá)式的值
等值語句在匯編時(shí)不產(chǎn)生任何目標(biāo)代碼,也不占用存儲(chǔ)單元。但在同一個(gè)程序中,不能對(duì)已定義的符號(hào)重新定義。
2.等號(hào)語句
格式:符號(hào) 表達(dá)式
等號(hào)語句與EQU語句有同樣的功能,區(qū)別在于等號(hào)語句定義的符號(hào)允許重新定義,使用更加方便靈活。
4.3.3 段定義語句
在匯編程序設(shè)計(jì)中,需要將存儲(chǔ)器分成若干段,CPU訪問存儲(chǔ)器時(shí),憑借段寄存器對(duì)各段進(jìn)行訪問。通常用段定義語句(SEGMENT/ENDS)來定義各種類型的邏輯段。在MASM5.0以上的匯編語言版本中,有完整定義偽指令和簡化段定義兩種。
1.完整的段定義語句
1)段定義語句
格式:段名SEGMENT[定位類型][,組合類型][,字長選擇][,類別]
任何一個(gè)邏輯段從SEGMENT語句開始,以ENDS語句結(jié)束。偽指令名SEGM ENT和ENDS是本語句的關(guān)鍵字,不可以默認(rèn),并且總是成對(duì)出現(xiàn)的。語句中段名是必選項(xiàng),定位類型、組合類型、字長選擇、分類名為可選項(xiàng)。
。1)段名(SEG NAME)
用戶自己選定,不能省略,一個(gè)段開始與結(jié)尾用的段名應(yīng)一致。
。2)定位類型(ALIGN TYPE)
定位類型表示對(duì)段的起始邊界的要求,可有以下五種選擇:
、貾AGE(頁):表示本段從一頁的邊界開始,一頁為256個(gè)字節(jié),所以PAGE定義的邊界其地址能整除256,這樣段的首地址的最后八位二進(jìn)制數(shù)一定為‘0’(即以00H結(jié)尾)。
、赑ARA(節(jié)):表示本段從一個(gè)節(jié)的邊界開始,一節(jié)為16個(gè)字節(jié),所以段的起始地址最后四位二進(jìn)制數(shù)一定為‘0’(即以0H結(jié)尾)。PARA通常隱含,即未定義定位類型時(shí),其定位類型為PARA。
、跠WORD(雙字):表示本段從4的倍數(shù)地址開始。
④WORD(字):表示本段從偶數(shù)地址開始,該地址的最低位應(yīng)為0。
⑤BYTE(字節(jié)):表示本段可從任何地址開始定位。
。3)組合類型(COMBINE TYPE)
組合類型用來對(duì)各個(gè)邏輯段之間的連接方式提出要求,可供選擇的參數(shù)有以下六種:
、貼ONE:表示該段與其他同名段不進(jìn)行連接,獨(dú)立存于存儲(chǔ)器中。如果語句中省略組合類型,則MASM把它作為NONE處理。
、赑UBLIC:該段可與其他模塊中的同名段在滿足定位類型的前提下,由低地址到高地址連接起來,組合成一個(gè)較大的邏輯段。
③COMMON:該段與其他模塊中的同名段采用覆蓋方式在存儲(chǔ)器中定位,即它們具有相同的段首地址,共享同一個(gè)存儲(chǔ)區(qū),而共享存儲(chǔ)器的長度由同名段中最大的段確定。段的內(nèi)容為所連接的最后一個(gè)模塊中的內(nèi)容,以及沒有覆蓋到的前面COMMON段的部分內(nèi)容。
、躆EMORY:定義該段與其他模塊中的同名段具有相同的首地址,采用覆蓋方式在存儲(chǔ)器中進(jìn)行連接。與COMMON的不同處是:帶有MEMORY參數(shù)的邏輯段覆蓋在其他同名段的最高地址。