七種尋址方式

立即尋址方式

操作數作爲指令的一部分而直接寫在指令中,這種操作數稱爲立即數,這種尋址方式也就稱爲立即數尋址方式。

立即數可以是8位、16位或32位,該數值緊跟在操作碼之後。如果立即數爲16位或32位,那麼,它將按“高高低低”的原則進行存儲。例如:

MOV AH, 80H   ADD AX, 1234H   MOV ECX, 123456H
MOV B1, 12H   MOV W1, 3456H   ADD D1, 32123456H

其中:B1、W1和D1分別是字節、字和雙字單元。

以上指令中的第二操作數都是立即數,在彙編語言中,規定:立即數不能作爲指令中的第二操作數。該規定與高級語言中“賦值語句的左邊不能是常量”的規定相一致。

立即數尋址方式通常用於對通用寄存器或內存單元賦初值。圖是指令“MOV AX, 4576H”存儲形式和執行示意圖。

這裏寫圖片描述

寄存器尋址方式

指令所要的操作數已存儲在某寄存器中,或把目標操作數存入寄存器。把在指令中指出所使用寄存器(即:寄存器的助憶符)的尋址方式稱爲寄存器尋址方式。
指令中可以引用的寄存器及其符號名稱如下:

8位寄存器有:AH、AL、BH、BL、CH、CL、DH和DL等;
16位寄存器有:AX、BX、CX、DX、SI、DI、SP、BP和段寄存器等;
32位寄存器有:EAX、EBX、ECX、EDX、ESI、EDI、ESP和EBP等。

寄存器尋址方式是一種簡單快捷的尋址方式,源和目的操作數都可以是寄存器。

  1. 源操作數是寄存器尋址方式
      如:ADD VARD, EAX  ADD VARW, AX   MOV VARB, BH等。
      其中:VARD、VARW和VARB是雙字,字和字節類型的內存變量。在第4章將會學到如何定義它們。

  2. 目的操作數是寄存器尋址方式
      如:ADD BH, 78h    ADD AX, 1234h   MOV EBX, 12345678H等。

  3. 源和目的操作數都是寄存器尋址方式
      如:MOV EAX, EBX   MOV AX, BX     MOV DH, BL等。

直接尋址方式

指令所要的操作數存放在內存中,在指令中直接給出該操作數的有效地址,這種尋址方式爲直接尋址方式。

在通常情況下,操作數存放在數據段中,所以,其物理地址將由數據段寄存器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] ;兩者是等效的,均爲直接尋址

寄存器間接尋址

操作數在存儲器中,操作數的有效地址用SI、DI、BX和BP等四個寄存器之一來指定,稱這種尋址方式爲寄存器間接尋址方式。該尋址方式物理地址的計算方法如下:

這裏寫圖片描述

在不使用段超越前綴的情況下,有下列規定:

若有效地址用SI、DI和BX等之一來指定,則其缺省的段寄存器爲DS;
若有效地址用BP來指定,則其缺省的段寄存器爲SS(即:堆棧段)。

例:假設有指令:MOV BX,[DI],在執行時,(DS)=1000H,(DI)=2345H,存儲單元12345H的內容是4354H。問執行指令後,BX的值是什麼?

解:根據寄存器間接尋址方式的規則,在執行本例指令時,寄存器DI的值不是操作數,而是操作數的地址。該操作數的物理地址應由DS和DI的值形成,即:

PA=(DS)*16+DI=1000H*16+2345H=12345H。

所以,該指令的執行效果是:把從物理地址爲12345H開始的一個字的值傳送給BX。

其執行過程如圖所示:

這裏寫圖片描述

寄存器相對尋址方式

操作數在存儲器中,其有效地址是一個基址寄存器(BX、BP)或變址寄存器(SI、DI)的內容和指令中的8位/16位偏移量之和。其有效地址的計算公式如公式所示:

這裏寫圖片描述

在不使用段超越前綴的情況下,有下列規定:

若有效地址用SI、DI和BX等之一來指定,則其缺省的段寄存器爲DS;

若有效地址用BP來指定,則其缺省的段寄存器爲SS。

指令中給出的8位/16位偏移量用補碼錶示。在計算有效地址時,如果偏移量是8位,則進行符號擴展成16位。當所得的有效地址超過0FFFFH,則取其64K的模。

例:假設指令:MOV BX, [SI+100H],在執行它時,(DS)=1000H,(SI)=2345H,內存單元12445H的內容爲2715H,問該指令執行後,BX的值是什麼?

解:根據寄存器相對尋址方式的規則,在執行本例指令時,源操作數的有效地址EA爲:

EA=(SI)+100H=2345H+100H=2445H

該操作數的物理地址應由DS和EA的值形成,即:

PA=(DS)*16+EA=1000H*16+2445H=12445H。

所以,該指令的執行效果是:把從物理地址爲12445H開始的一個字的值傳送給BX。

其執行過程如圖所示:

這裏寫圖片描述

基址加變址尋址方式

操作數在存儲器中,其有效地址是一個基址寄存器(BX、BP)和一個變址寄存器(SI、DI)的內容之和。其有效地址的計算公式如公式所示:

這裏寫圖片描述

在不使用段超越前綴的情況下,規定:如果有效地址中含有BP,則缺省的段寄存器爲SS;否則,缺省的段寄存器爲DS。

例:假設指令:MOV BX, [BX+SI],在執行時,(DS)=1000H,(BX)=2100H,(SI)=0011H,內存單元12111H的內容爲1234H。問該指令執行後,BX的值是什麼?

解:根據基址加變址尋址方式的規則,在執行本例指令時,源操作數的有效地址EA爲:

EA=(BX)+(SI)=2100H+0011H=2111H

該操作數的物理地址應由DS和EA的值形成,即:

PA=(DS)*16+EA=1000H*16+2111H=12111H

所以,該指令的執行效果是:把從物理地址爲12111H開始的一個字的值傳送給BX。

其執行過程如圖所示:

這裏寫圖片描述

相對基址加變址尋址方式

操作數在存儲器中,其有效地址是一個基址寄存器(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種尋址方式中最複雜的一種尋址方式,它可變形爲其它類型的存儲器尋址方式。下表列舉出該尋址方式與其它尋址方式之間的變形關係。

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章