[匯] 當即尋址,直接尋址,間接尋址

當即尋址就是指令當中自帶數據,直接讀取,最快;
直接尋址就是指令中存放的是地址,直接解析這個地址;
間接尋址就只指令中存放的是地址的地址,或者是存放地址的寄存器,最慢。

總共有14個16位寄存器,8個8位寄存器數組

 

通用寄存器:指針

  數據寄存器:字符串

  AH(8位)  AL(8位)  AX(16位)   (AX和AL又稱累加器)it

  BH(8位)  BL(8位)  BX(16位)   (BX又稱基址寄存器,惟一做爲存儲器指針使用寄存器)  擴展

  CH(8位)  CL(8位)  CX(16位)   (CX用於字符串操做,控制循環的次數,CL用於移位)循環

  DH(8位)  DL(8位)  DX(16位)   (DX通常用來作32位的乘除法時存放被除數或者保留餘數)引用

 

  指針寄存器:方法

  SP 堆棧指針 (存放棧頂地址)數據

  BP 基址指針 (存放堆棧基址偏移)margin

 

  變址寄存器:主要用於存放某個存儲單元地址的偏移,或某組存儲單元開始地址的偏移,

  即做爲存儲器(短)指針使用。做爲通用寄存器,它們能夠保存16位算術邏輯運算中的操

  做數和運算結果,有時運算結果就是須要的存儲單元地址的偏移.

 

  SI 源地址  (源變址寄存器)

  DI 目的地址 (目的變址寄存器)

  

控制寄存器:

  IP 指令指針

  FLAG 標誌寄存器

   ① 進位標誌 CF,記錄運算時最高有效位產生的進位值。

 ② 符號標誌 SF,記錄運算結果的符號。結果爲負時置1,不然置0。

 ③ 零標誌  ZF,運算結果爲0時ZF位置1,不然置0。

 ④ 溢出標誌 OF,在運算過程當中,如操做數超出了機器可表示數的範圍稱爲溢出。溢出時OF位置1,不然置0。

 ⑤ 輔助進位標誌 AF,記錄運算時第3位(半個字節)產生的進位值。

 ⑥ 奇偶標誌 PF,用來爲機器中傳送信息時可能產生的代碼出錯狀況提供檢驗條件。當結果操做數中1的個數爲偶數時置1,不然置0。

 

段寄存器

  CS 代碼段  IP

  DS 數據段  

  SS 堆棧段  SP BP

  ES 附加段

 

七種尋址方式:

一、當即尋址方式:

操做數就包含在指令中。做爲指令的一部分,跟在操做碼後存放在代碼段。

這種操做數成爲當即數。當即數能夠是8位的,也能夠是16位的。

例如:

    指令: MOV AX,1234H

      則: AX = 1234H

 

二、寄存器尋址方式:

操做數在CPU內部的寄存器中,指令指定寄存器號。

對於16位操做數,寄存器能夠是:AX、BX、CX、DX、SI、DI、SP和BP等。

對於8位操做數,寄存器能夠是AL 、AH、BL、BH、CL、CH、DL、DH。

這種尋址方式因爲操做數就在寄存器中,不須要訪問存儲器來取得操做數

於是能夠取得較高的運算數度。

 

三、直接尋址方式:

操做數在寄存器中,指令直接包含有操做數的有效地址(偏移地址)

注:操做數通常存放在數據段

因此操做數的地址由DS加上指令中直接給出的16位偏移獲得。若是採用

段超越前綴,則操做數也可含在數據段外的其餘段中。

例如:

MOV AX,[8054]

如(DS) = 2000H,

則執行結果爲(AX) = 3050H

(物理地址=20000+8054=28054H)

28054H裏的內容爲3050H

 

在彙編語言指令中,能夠用符號地址代替數值地址

如:MOV AX,VALUE

此時VALUE爲存放操做數單元的符號地址。

如寫成:MOV AX,[VALUE]也是能夠的,二者是等效的。

如VALUE在附加段中,則應指定段超越前綴以下:

MOV AX,ES:VALUE 或 MOV AX,ES:[VALUE]

 

四、寄存器間接尋址方式:

操做數在寄存器中,操做數有效地址在SI、DI、BX、BP

這四個寄存器之一中。在通常狀況下,若是有效地址在

SI、DI和BX中,則以DS段寄存器中的內容爲段值。若是

有效地址在BP中,則以SS段寄存器中的內容爲段值

例如:

MOV AX,[SI]

若是(DS) = 5000H (SI) = 1234H

則物理地址 =  50000 + 1234 = 51234H

51234H地址中的內容爲:6789H

執行該指令後,(AX) = 6789H

 

五、寄存器相對尋址方式:

操做數在存儲器中,操做數的有效地址是一個基址寄存器(BX、BP)

或變址寄存器(SI、DI)的內容加上指令中給定的8位或16位位移量之和

 

    BX  8位 位移量

EA(有效地址) =  BP  + 

    SI  16位 位移量

    DI

在通常狀況下,若是SI、DI、或BX中的內容做爲有效地址的一部分,那麼

引用的段寄存器是DS;若是BP中的內容做爲有效地址的一部分,那麼引用的

段寄存器是SS。

 

物理地址 = 16d × (DS) + (BX) + 8

           或(SI)或16位位移量

           或(DI)

物理地址 = 16d × (SS) + (BP) + 8位位移量

                       或16位位移量

在指令中給定的8位或16位位移量採用補碼形式表示。在計算有效地址時,如

位移量是8位,則被帶符號擴展成16位。

例如:

MOV AX,[DI+1223H]

假設,(DS) = 5000H,(DI) = 3678H

則物理地址 = 50000 + 3678 + 1233 = 5489BH

5489BH地址中的內容:55AAH

執行該指令後AX = 55AAH

下面指令中,源操做數採用寄存器相對尋址,引用的段寄存器是SS: MOV BX,[BP-4]

下面指令中,目的操做數採用寄存器相對尋址,引用的段寄存器是ES: MOV ES:[BX+5],AL

指令:MOV AX,[SI+3]與MOV AX,3[SI]是等價的

 

六、基址加變址尋址方式:

操做數在寄存器中,操做數的有效地址由:

基址寄存器之一的內容與變址寄存器之一的內容相加

   BX   SI

即: EA =    + 

   BP   DI

在通常狀況下,若是BP以內容做爲有效地址的一部分,則以SS以內容爲段值,不然已DS

爲段值。

例如:

MOV AX,[BX][DI]

如:(DS)=2100H,

   (BX)=0158H,

   (DI)=10A5H

則EA=0158 + 10A5 = 11FD

物理地址=21000 + 11FD = 221FDH

221FDH地址中的內容:1234H

執行該指令後AX = 1234H

 

下面指令中,目的操做數採用基址加變址尋址,

引用的段寄存器是DS: MOV DS:[BP+SI],AL

 

下面指令中,源操做數採用基址加變址尋址,

引用的段寄存器ES: MOV AX,ES:[BX+SI]

 

這種尋址方式使用與數組或表格處理。用基址寄存器存放數組首地址,而用變地寄存器

來定位數組中的各元素,或反之。因爲兩個寄存器均可改變,因此能更加靈活地訪問數

組或表格中的元素。

下面的兩種表示方法是等價的:

MOV AX,[BX+DI]

MOV AX,[DI][BX]

 

七、相對基址加變址尋址方式:

操做數在存儲器中,操做數的有效地址因爲基址寄存器之一的內容與變址寄存器之一的

內容及指令中給定的8位或16位位移量相加獲得。

         BX    SI    8位

即: EA =     +     +      位移量

   BP    DI    16位

在通常狀況下,若是BP中的內容做爲有效地址的一部分,則以SS段寄存器中的內容爲段

值,不然以DS段寄存器中的內容爲段值。

在指令中給定的8位或16位位移量採用補碼形式表示。

在計算有效地址時,若是位移量是8位,那麼被帶符號擴展成16位。

當所得的有效地址操做FFFFH時,就取其64K的模

例如:

MOV AX,[BX+DI-2]

假設,(DS) = 5000H, (BX) = 1223H, DI = 54H, (51275) = 54H, (51276) = 76H

物理地址= 50000 + 1223 + 0054 + FFFE(-2 各位取反末位加一) = 51275H

執行該指令後 (AX) = 7654H

 

相對基址加變址這種尋址方式的表示方法多種多樣,如下四種方法均是等價的:

MOV AX,[BX+DI+1234H], MOV AX,1234H[BX][DI]

MOV AX 1234H[BX+DI],  MOV AX,1234H[DI][BX]

相關文章
相關標籤/搜索