基本概念
1、尋址
根據指令内容确定操作數位址的過程,稱為尋址。
2、在計算機中操作數位址的形成就是尋址方式。
8086系統中的操作數:
- 立即操作數:操作數包含在指令中。
- 寄存器操作數:操作數包含在 CPU 的某個内部寄存器中。
- 儲存器操作數:約定操作數放在儲存器中存放資料的某個單元。
- I/O操作數
3、尋址具體分類
一、立即數尋址(Immediate Addressing)
定義:操作數是由指令直接提供,用于對寄存器賦初值
特點
- 不需要執行總線周期,執行速度快
- 立即數隻能是整數,不能是小數、變量或其它類型的資料
- 立即數隻能所謂源操作數,不能作為目的操作數
例如
MOV AL, 06H
MOV AX, 3306H
格式:
指令 資料
,第一個是把06H指派給AL(一個位元組),第二個是把3306H指派給AX(一個字,兩個位元組)
二、寄存器尋址(Register Addressing)
定義:操作數在CPU内部的寄存器中,指令給出寄存器名。
特點
- 不需要使用總線周期,執行速快
- 可采用 8 個寄存器:AX,BX,CX,DX,BP,SP,SI,DI
- 源操作數和目的操作數均可采用寄存器尋址
例如
MOV AH, BL
MOV AX, BX
MOV CX, AX
就是把後面寄存器中的内容指派給前面寄存器
三、存儲器尋址
了解存儲器尋址之前,首先要說明下有效位址和實體位址。
(1)有效位址(Effective Address)
根據尋址方式計算所得的位址叫做有效位址(EA),也就是段内偏移位址。有效位址還需要與相應的端基址位址組合才是20位的實體位址,該工作由CPU完成。
(2)實體位址(Physical Address)
實體位址 = 段位址×16D + 偏移位址
= 段位址×10H + 偏移位址
= 段位址左移4位 + 偏移位址
1、直接尋址
定義:操作數在存儲器中,其有效位址由指令直接提供。直接尋址中,指令的操作碼後面直接給出了操作數的16位偏移位址(有效位址 EA)。
例如:
MOV AX, [1070 H]
[ ]表示存儲器位址,裡面存放偏移量
段位址:因為是在代碼段中,是以代碼段段位址DS = 2000H
偏移位址:直接給出了,是以EA = 1070H
實體位址:段位址偏移4位,加上偏移位址
PA = 16*DS + EA
= 20000H + 1070H
= 21070H
2、寄存器間接尋址(Register Index Addressing)
定義:操作數在存儲器中,尋址方式同直接尋址相似,但偏移位址由指針寄存器提供。
指針寄存器
基址寄存器:BP 和 BX
變址寄存器:SI 和 DI
(1)在預設的情況下,當使用BX,SI,DI寄存器時,表示操作數在目前資料段(DS給出段基址)
操作數實體位址:
PA=16*DS+EA
EA=(BX 或 SI 或 DI)
(2)當使用 BP 時,表示操作數在目前堆棧段(SS 給出段基址)
操作數實體位址:
PA=16*DS+EA
EA=BP
例如:
MOV AX, [BX]
段基址:DS=2000H
偏移位址:EA=1000H
實體位址:PA=16*DS+EA=21000H
3、寄存器相對尋址(Register Relative Addressing)
定義:操作數在存儲器中,并且一般指定BX、BP、SI、DI的内容進行間接尋址,但是操作數的有效位址EA(即偏移量)還要加上指令中指定的8位或16位位移量(Displacement)
使用BX,SI,DI寄存器時,預設的段寄存器為DS
使用BP時,預設的段寄存器為SS
例如:
MOV AL, [BX+5]
段基址:DS=6000H
偏移位址:EA=2000H+05H=2005H
實體位址:PA=16*DS+EA=62005H
4、基址變址尋址(Based Index Addressing)
定義:8086指令西銅允許把基址寄存器和變址寄存器組合起來構成一種新的尋址方式,叫做基址變址尋址。操作數一定在存儲器中,操作數的有效位址EA是由指令指定的一個基址寄存器(如BX、BP)内容加上一個變址寄存器(如SI、DI)的内容。
使用BX,SI,DI寄存器時,預設的段寄存器為DS
使用BP時,預設的段寄存器為SS
例如:
MOV AX, [BX+SI]
段基址:DS=5000H
偏移位址:EA=BX+SI=2006H
實體位址:PA=16*DS+EA=52006H
5、相對基址變址尋址(Relative Based Indexed Addressing)
定義:操作數的有效位址是一個基址寄存器内容、一個變址寄存器内容和8位或16位位移量這三者之和。
使用BX,SI,DI寄存器時,預設的段寄存器為DS
使用BP時,預設的段寄存器為SS
例如:
MOV AX, [BX+SI]
段基址:DS=4000H
偏移位址:EA=BX+DI+1234H=1444H
實體位址:PA=16*DS+EA=41444H
四、I/O端口尋址
I/O端口:獨立編址,用專門的IN和OUT指令對I/O端口進行操作。
- 當端口位址小于等于255(FFH)時,直接尋址
- 當端口位址大于255(FFH),隻能用DX作為間接尋址
是以可以尋址的端口可達65536(2^16)個
1、直接端口尋址
定義:IN 與 OUT 指令為二位元組指令,指令代碼的第二位元組為端口的直接位址,直接端口尋址個數為0~255個。
IN AL, 60H; 将60H中的資料送到AL中
IN AX, 80H; 将80H和81H中資料送到AX中
注意:IN和OUT指令不支援立即數尋址,是以指令中出現的資料時直接尋址的端口位址
2、寄存器的間接端口尋址
定義:當端口位址大于255時,必須先把端口位址送到DX寄存器中。
MOV DX, 333H; 将端口位址送入DX
OUT DX, AL; 将AL中的資料輸出到DX指定端口
MOV DX, 330H; 将端口位址送入DX
IN AL, DX; 将DX所指端口中的資料送到AL
注意:這裡隻能用DX作為I/O指令的間接尋址寄存器,不能用其他寄存器作為I/O指令的間接尋址