指令所要的操作數(shù)存放在內(nèi)存中,在指令中直接給出該操作數(shù)的有效地址,這種尋址方式為直接尋址方式。
在通常情況下,操作數(shù)存放在數(shù)據(jù)段中,所以,其物理地址將由數(shù)據(jù)段寄存器DS和指令中給出的有效地址直接形成,但如果使用段超越前綴,那么,操作數(shù)可存放在其它段。
例:假設(shè)有指令:MOV BX, [1234H],在執(zhí)行時(shí),(DS)=2000H,內(nèi)存單元21234H的值為5213H。問該指令執(zhí)行后,BX的值是什么?
解:根據(jù)直接尋址方式的尋址規(guī)則,把該指令的具體執(zhí)行過程用下圖來(lái)表示。
從圖中,可看出執(zhí)行該指令要分三部分:
由于1234H是一個(gè)直接地址,它緊跟在指令的操作碼之后,隨取指令而被讀出;
訪問數(shù)據(jù)段的段寄存器是DS,所以,用DS的值和偏移量1234H相加,得存儲(chǔ)單元的物理地址:21234H;
取單元21234H的值5213H,并按“高高低低”的原則存入寄存器BX中。
所以,在執(zhí)行該指令后,BX的值就為5213H。
由于數(shù)據(jù)段的段寄存器默認(rèn)為DS,如果要指定訪問其它段內(nèi)的數(shù)據(jù),可在指令中用段前綴的方式顯式地書寫出來(lái)。
下面指令的目標(biāo)操作數(shù)就是帶有段前綴的直接尋址方式。
MOV ES:[1000H], AX
直接尋址方式常用于處理內(nèi)存單元的數(shù)據(jù),其操作數(shù)是內(nèi)存變量的值,該尋址方式可在64K字節(jié)的段內(nèi)進(jìn)行尋址。
注意:立即尋址方式和直接尋址方式的書寫格式的不同,直接尋址的地址要寫在括號(hào)“[”,“]”內(nèi)。在程序中,直接地址通常用內(nèi)存變量名來(lái)表示,如:MOV BX, VARW,其中,VARW是內(nèi)存字變量。
試比較下列指令中源操作數(shù)的尋址方式(VARW是內(nèi)存字變量):
MOV AX, 1234H MOV AX, [1234H] ;前者是立即尋址,后者是直接尋址
MOV AX, VARW MOV AX, [VARW] ;兩者是等效的,均為直接尋址