運算元在儲存器中,其有效位址是乙個基址暫存器(bx、bp)的值、乙個變址暫存器(si、di)的值和指令中的8位/16位偏移量之和。其有效位址的計算公式如公式所示。
在不使用段超越字首的情況下,規定:如果有效位址中含有bp,則其預設的段暫存器為ss;否則,其預設的段暫存器為ds。
指令中給出的8位/16位偏移量用補碼表示。在計算有效位址時,如果偏移量是8位,則進行符號擴充套件成16位。當所得的有效位址超過0ffffh,則取其64k的模。
例:假設指令:mov ax, [bx+si+200h],在執行時,(ds)=1000h,(bx)=2100h,(si)=0010h,記憶體單元12310h的內容為1234h。問該指令執行後,ax的值是什麼?
解:根據相對基址加變址定址方式的規則,在執行本例指令時,源運算元的有效位址ea為:
ea=(bx)+(si)+200h=2100h+0010h+200h=2310h
該運算元的實體地址應由ds和ea的值形成,即:
pa=(ds)*16+ea=1000h*16+2310h=12310h
所以,該指令的執行效果是:把從實體地址為12310h開始的乙個字的值傳送給ax。其執行過程如圖所示。
從相對基址加變址這種定址方式來看,由於它的可變因素較多,看起來就顯得複雜些,但正因為其可變因素多,它的靈活性也就很高。比如:
用d1[i]來訪問一維陣列d1的第i個元素,它的定址有乙個自由度,用d2[i][j]來訪問二維陣列d2的第i行、第j列的元素,其定址有二個自由度。多乙個可變的量,其定址方式的靈活度也就相應提高了。
相對基址加變址定址方式有多種等價的書寫方式,下面的書寫格式都是正確的,並且其定址含義也是一致的。
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]等是錯誤的,即所用暫存器不能在「[「,」]」之外,該限制對暫存器相對定址方式的書寫也同樣起作用。
相對基址加變址定址方式是以上7種定址方式中最複雜的一種定址方式,它可變形為其它型別的儲存器定址方式。下表列舉出該定址方式與其它定址方式之間的變形關係。
七種定址方式 基址加變址定址方式
運算元在儲存器中,其有效位址是乙個基址暫存器 bx bp 和乙個變址暫存器 si di 的內容之和。其有效位址的計算公式如公式所示。在不使用段超越字首的情況下,規定 如果有效位址中含有bp,則預設的段暫存器為ss 否則,預設的段暫存器為ds。例 假設指令 mov bx,bx si 在執行時,ds 1...
相對基址加變址定址方式
運算元在儲存器中,其有效位址是乙個基址暫存器 bx bp 的值 乙個變址暫存器 si di 的值和指令中的8位 16位偏移量之和。其有效位址的計算公式如公式所示。在不使用段超越字首的情況下,規定 如果有效位址中含有bp,則其預設的段暫存器為ss 否則,其預設的段暫存器為ds。指令中給出的8位 16位...
彙編相對基址變址定址方式的使用
定義二維陣列array,該陣列為3行5列,使用相對基址變址定址方式改變其中第8個元素的值 如下 data segment arr db 1,2,3,4,5 db 7,8,9,10,11 db 13,14,15,16,17 ends code segment assume cs code,ds dat...