七種尋址方式(相對(duì)基址加變址尋址方式)
操作數(shù)在存儲(chǔ)器中,其有效地址是一個(gè)基址寄存器(BX、BP)的值、一個(gè)變址寄存器(SI、DI)的值和指令中的8位/16位偏移量之和。其有效地址的計(jì)算公式如公式所示。
在不使用段超越前綴的情況下,規(guī)定:如果有效地址中含有BP,則其缺省的段寄存器為SS;否則,其缺省的段寄存器為DS。
指令中給出的8位/16位偏移量用補(bǔ)碼表示。在計(jì)算有效地址時(shí),如果偏移量是8位,則進(jìn)行符號(hào)擴(kuò)展成16位。當(dāng)所得的有效地址超過0FFFFH,則取其64K的模。
例:假設(shè)指令:MOV AX, [BX+SI+200H],在執(zhí)行時(shí),(DS)=1000H,(BX)=2100H,(SI)=0010H,內(nèi)存單元12310H的內(nèi)容為1234H。問該指令執(zhí)行后,AX的值是什么?
解:根據(jù)相對(duì)基址加變址尋址方式的規(guī)則,在執(zhí)行本例指令時(shí),源操作數(shù)的有效地址EA為:
EA=(BX)+(SI)+200H=2100H+0010H+200H=2310H
該操作數(shù)的物理地址應(yīng)由DS和EA的值形成,即:
PA=(DS)*16+EA=1000H*16+2310H=12310H
所以,該指令的執(zhí)行效果是:把從物理地址為12310H開始的一個(gè)字的值傳送給AX。其執(zhí)行過程如圖所示。
從相對(duì)基址加變址這種尋址方式來看,由于它的可變因素較多,看起來就顯得復(fù)雜些,但正因?yàn)槠淇勺円蛩囟?,它的靈活性也就很高。比如:
用D1[i]來訪問一維數(shù)組D1的第i個(gè)元素,它的尋址有一個(gè)自由度,用D2[i][j]來訪問二維數(shù)組D2的第i行、第j列的元素,其尋址有二個(gè)自由度。多一個(gè)可變的量,其尋址方式的靈活度也就相應(yīng)提高了。
相對(duì)基址加變址尋址方式有多種等價(jià)的書寫方式,下面的書寫格式都是正確的,并且其尋址含義也是一致的。
MOV AX, [BX+SI+1000H] MOV AX, 1000H[BX+SI]
MOV AX, 1000H[BX][SI] MOV AX, 1000H[SI][BX]
但書寫格式BX [1000+SI]和SI[1000H+BX]等是錯(cuò)誤的,即所用寄存器不能在“[“,”]”之外,該限制對(duì)寄存器相對(duì)尋址方式的書寫也同樣起作用。
相對(duì)基址加變址尋址方式是以上7種尋址方式中最復(fù)雜的一種尋址方式,它可變形為其它類型的存儲(chǔ)器尋址方式。下表列舉出該尋址方式與其它尋址方式之間的變形關(guān)系。