【微機原理與接口技術】三、8086尋址方式

-8086尋址方式:

尋址方式:指令中說明操作數所在地址的方法。

指令區別:計算機指令通常包含操作碼和操作數兩部分。指令有單操作數、雙操作數、無操作數的區別。雙操作數要用逗號將兩操作數分隔開,逗號右邊操作數稱爲源操作數,逗號左邊操作數稱爲目的操作數。

 

 

1、立即尋址方式(Immediate Addressin)

操作數以立即數的形式直接包含在指令內。

-注意:所有指令中,立即數只能作源操作數,不能作目的操作數。以A~F打頭的數字出現在指令中時,前面一定要加數字0,以免與其他符號相混淆。

MOV AL, 26H ;將8位立即數26H送到AL

MOV CX, 2A50H ;將16位立即數2A50H送到CX

 

2、寄存器尋址方式(Register Addressing)

操作數包含在寄存器中,由指令指定寄存器的名稱。16位操作數,寄存器可以是AX、BX、CX、DX、SI、DI、SP、BP等;8位操作數,寄存器可以是AH、AL、BH、BL、CH、CL、DH、DL。

-注意:源操作數與目的操作數的長度必須一致。

MOV DX, AX ;將AX中的值賦給DX,AX內容不變

 

3、直接尋址方式(Direct Addressing)

1)直接尋址方式

操作數的偏移地址稱爲有效地址EA(Effective Addressing),直接尋址時,存儲單元的有效地址直接由指令給出,該地址單元中的數據總是存放在存儲器中,所以必須先求出操作數的物理地址,然後再訪問存儲器,才能取得操作數。

-注意:如果指令中沒有用前綴指明操作數存放在那一段,默認使用的段寄存器時數據段寄存器DS (操作數物理地址 = 16 × DS + EA),指令中有效地址必須加方括號[ ],與立即數區別開。

MOV AX, [2000H]

;EA=2000H,假設DS=3000H

;源操作數物理地址 = DS × 10H + EA = 32000H

;由於目的寄存器是AX(16位),將該地址處的字送入AX

 

2)段超越前綴

如果要對代碼段、堆棧段、附加段寄存器所指出的存儲區進行直接尋址,應當在指令中指定段超越前綴

MOV AX, ES:[500H]

;源操作數物理地址 = 16 × ES + 500H

 

3)符號地址

允許用符號地址代替數值地址(給存儲單元取名字)

AREA1  EQU  0867H

MOV    AX,  AREA1

;等值僞指令EQU用來給常數0867H定義符號名AREA1

;從有效地址爲AREA1的存儲單元中取出一個字送到AX中

 

AREA1  DW   0867H

MOV    AX,  AREA1

;DW僞指令語句用來定義變量

;變量用作表示存儲器中的數據

 

也可寫成

MOV  AX, [AREA1]

也允許段超越

MOV  AX,ES:[AREA1]

MOV  AX,ES:AREA1

 

4、寄存器間接尋址方式(Register Indirect Addressing)

指令中給出的寄存器中的值不是操作數本身,而是操作數的有效地址。

-注意:寄存器名稱外面必須加方括號,語句存期尋址方式相區別。指令中使用的寄存器有基址寄存器BX、BP和變址寄存器SI、DI。若指定寄存器是BX、SI、DI,則默認操作數存放在數據段中,使用DS內容作爲段地址。若指定寄存器BP,則默認操作數在堆棧段中,段地址在SS中。即:

物理地址 = 16 × DS + BX

          或 = 16 × DS + SI

          或 = 16 × DS + DI

          或 = 16 × SS + BP

也可以指定段超越前綴來從默認段以外的段中取得數據

 

MOV  BX, [SI]

;設DS=1000H,SI=2000H,(12000H)=318BH

;物理地址 = 16 × DS + SI = 12000H

;執行後BX=318BH

 

 

5、寄存器相對尋址方式(Register Relative Addressing)

操作數的有效地址是一個基址或變址寄存器的內容與指令中指定的8位或16位位移量(Displacement)之和。物理地址計算同寄存器間接尋址,即:

物理地址 = 16 × DS + BX

          或 = 16 × DS + SI

          或 = 16 × DS + DI

          或 = 16 × SS + BP

 

MOV  BX,COUNT[SI]

;設DS=3000H,SI=2000H位移量COUNT=4000H

;物理地址 = 16 × DS + SI + COUNT = 36000H

 

也可表示爲

MOV  BX, [COUNT + SI]

也允許段超越前綴

MOV  DH, ES:ARRAY[SI]

 

 

6、基址變址尋址方式(Based Indexed Addressing)

操作數的有效地址是一個基址寄存器(BX或BP)和一個變址寄存器(SI或DI)的內容之和,兩個寄存器均由指令指定

若:基址寄存器爲BX,段址寄存器用DS

則:物理地址  = 16 × DS + BX + SI

       或            = 16 × DS + BX + DI

若:基址寄存器爲BP,段址寄存器用SS

則:物理地址  = 16 × SS + BP + SI

       或            = 16 × SS + BP + DI

 

MOV  AX, [BX][SI]

;設:DS=3000H,BX=1200H,SI=0500H

;物理地值 = 16 × DS + BX + SI = 31700H

 

指令也可以寫成:

MOV  AX, [BX + SI]

 

7、相對基址變址尋址方式(Relative Based Indexed Addressing)

操作數的有效地址是一個基址寄存器和一個變址寄存器的內容,再加上指令中指定的8位或16位位移量之和。

若:基址寄存器爲BX,段址寄存器用DS

則:物理地址  = 16 × DS + BX + SI + 8位或16位位移量

       或           = 16 × DS + BX + DI + 8位或16位位移量

若:基址寄存器爲BP,段址寄存器用SS

則:物理地址  = 16 × SS + BP + SI + 8位或16位位移量

       或           = 16 × SS + BP + DI + 8位或16位位移量

MOV  AX, MASK[BX][SI]

;設DS=2000H,BX=1500H,SI=0300H,MASK=0200H

;物理地址=16 × DS + BX + SI + MASK = 21A00H

 

指令也可寫成:

MOV  AX, [MASK+ BX+SI]

MOV  AX, 200H[BX+SI]

MOV  AX, MASK[BX+SI]

 

8、其他尋址方式

1)隱含尋址

指令中不指明操作數,但有隱含規定的尋址方式。例如指令DAA。

 

2)I/O端口尋址

8086有直接端口和間接端口兩種尋址方式。

①直接端口尋址

端口地址由指令直接提供,它是一個8位立即數。由於8位二進制數的最大值爲255,所以在這種尋址方式中,能訪問的端口號爲00~FFH,即256個端口。

IN  AL, 63H

;將端口63H中的內容送入AL

②間接尋址

被尋址的端口號由寄存器DX提供,這種尋址方式能訪問多達64K個I/O端口,端口號0000~FFFFH

MOV  DX, 213H

IN       AL, DX

;DX=端口地址號213H

;AL<-端口213H的內容

 

3)一條指令中有幾種尋址方式

目的操作數也可以用除立即尋址以外的所有尋址方式指定,許多指令還具有各自的隱含規則。

MOV  [BX], AL

;設BX=3600H,DS=1000H,AL=05H

;目的操作數的物理地址

;=16 × DS + BX =13600H

;指令執行結果爲

;(13600H)=05H

 

4)轉移類指令尋址

 

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