匯編語言教程-段寄存器的說明語句
在匯編語言源程序中可以定義多個段,每個段都要與一個段寄存器建立一種對應(yīng)關(guān)系。建立這種對應(yīng)關(guān)系的說明語句格式如下:
ASSUME段寄存器名:段名[,段寄存器名:段名,……]
其中:段寄存器是CS、DS、ES、SS、FS和GS,段名是在段定義語句說明時的段名。
在一條ASSUME語句中可建立多組段寄存器與段之間的關(guān)系,每種對應(yīng)關(guān)系要用逗號分隔。例如,
ASSUME CS:CODE1, DS:DATA1
上面的語句說明了:CS對應(yīng)于代碼段CODE1,DS對應(yīng)于數(shù)據(jù)段DATA1。
在ASSUME語句中,還可以用關(guān)鍵字NOTHING來說明某個段寄存器不與任何段相對應(yīng)。下面語句說明了段寄存器ES不與某段相對應(yīng)。
ASSUME ES:NOTHING
在通常情況下,代碼段的第一條語句就是用ASSUME語句來說明段寄存器與段之間的對應(yīng)關(guān)系。在代碼段的其它位置,還可以用另一個ASSUME語句來改變前面ASSUME語句所說明的對應(yīng)關(guān)系,這樣,代碼段中的指令就用最近的ASSUME語句所建立的對應(yīng)關(guān)系來確定指令中的有關(guān)信息。
例6.1匯編語言段及其段說明語句的作用。
DATA1SEGMENT;定義數(shù)據(jù)段DATA1
word1DW5678h
byte1DB"ABCDEFG"
DATA1ENDS
DATA2SEGMENT;定義數(shù)據(jù)段DATA2
word2DW1234h
word3DW9876h
DATA2ENDS
DATA3SEGMENT;定義數(shù)據(jù)段DATA3
byte2DB?
DATA3ENDS
CODE1SEGMENT;編寫代碼段CODE1
ASSUMECS:CODE1, DS:DATA1, ES:DATA2;(1)
MOVAX, DATA1;(2)
MOVDS, AX;(3)
MOVAX, DATA2;(4)
MOVES, AX;(5)
…
MOVAX, word1;訪問段DATA1中的字變量word1
MOVword2, AX;訪問段DATA2中的字變量word2
…
ASSUMEDS:DATA3, ES:NOTHING;(6)
MOVAX, DATA3
MOVDS, AX
MOVBL, byte2;訪問段DATA3中的字節(jié)變量byte2
…
MOVAX, 4C00H;(7)
INT21H;(8)
CODE1 ENDS
語句(1)和(6)分別說明了段和段寄存器之間的對應(yīng)關(guān)系,其中語句(6)重新說明語句(1)所指定的對應(yīng)關(guān)系。
二組語句(2)和(3)、(4)和(5)實(shí)現(xiàn)對段寄存器DS和ES賦初值。ASSUME說明語句只起說明作用,它不會對段寄存器賦值,所以,必須對有關(guān)段寄存器賦值。在以后的其它源程序中也都是用此方法來實(shí)現(xiàn)對數(shù)據(jù)段寄存器賦值的。
語句(7)和(8)是調(diào)用中斷21H的4CH號功能來結(jié)束本程序的執(zhí)行,程序的返回代碼由寄存器AL來確定。結(jié)束本程序執(zhí)行的指令是所有主模塊必須書寫的語句。
注意:代碼段寄存器不能由程序員在源程序中對其賦值,其值是由操作系統(tǒng)在裝入它進(jìn)入系統(tǒng)運(yùn)行時自動賦值的。
評論