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