位移量:數(shù)組首地址
基址寄存器:數(shù)組元素行址 �。拢�、BX
變址寄存器:數(shù)組元素列址 SI、DI
設(shè)ARRAY是10行、10列二維數(shù)組,按行存放在主存的堆棧段中,每個(gè)元素占一個(gè)字節(jié)單元。
MOV �。粒�,ARRAY[BP]�。郏樱桑�
ARRAY(i,j)等價(jià)于:(BP)=i×10 �。ǎ樱桑剑�
所以:EA=ARRAY的偏移量+(BP)+(SI),段基址隱含由SS提供
下面介紹一下基址變址尋址方式:
變址尋址:EA是SI、DI和位移量提供 基址尋址:EA是BX、BP和位移量提供
MOV �。茫�,10H[SI] == �。停希帧 。模樱海茫�,10H[SI]
MOV TAB[DI],AX �。剑健 。停希帧 。模樱海裕粒拢郏模桑�,AX
MOV AL,ARY[BX] �。剑健 。停希帧 。模樱海粒蹋粒遥伲郏拢兀�
MOV �。樱裕遥郏拢校�,DX == �。停希帧 。樱樱海樱裕遥郏拢校�,DX
例如:用變址尋址方式訪問(wèn)一維數(shù)組,一維數(shù)組ARY存放在主存的數(shù)據(jù)段中,每個(gè)元素占兩個(gè)字節(jié)單元。從數(shù)組首地址起依次存放:ARY(0)、ARY(1)、……、ARY(i)、……
可以通過(guò)下列指令來(lái)訪問(wèn)數(shù)組中的任意元素:
MOV �。粒兀。粒遥伲郏樱桑�
訪問(wèn)ARY(i),則(SI)=i×2
所訪問(wèn)元素的邏輯地址:EA=ARY的偏移量(數(shù)組首址)+(SI)
段基址隱含由DS提供
從上邊的兩個(gè)小例子,基址變址尋址方式訪問(wèn)二維數(shù)組&&變址尋址方式訪問(wèn)一維數(shù)組,總結(jié)一下8086/8088的尋址方式。
概括的說(shuō)尋址方式就是尋找操作數(shù)的地址的方式,一共有8種方式:
寄存器尋址方式
立即數(shù)尋址方式
存儲(chǔ)器尋址方式
串操作尋址方式
�。桑隙丝趯ぶ贩绞�
其中存儲(chǔ)器尋址方式包含4種:
直接尋址方式
寄存器間尋址方式
變址基址尋址方式
基址變址尋址方式
這是視頻教程中的分類方法,不同的教程分類方式不一樣,重點(diǎn)是理解尋址過(guò)程。下面舉一些例子來(lái)說(shuō)明各種尋址的具體方式。上面得8種方式前3大類(6小類)是重點(diǎn),而后邊的串操作尋址方式、I/O端口尋址方式這里先不做討論。
寄存器尋址方式:
指令所需的操作數(shù)在寄存器中,按指令給出的寄存器地址去獲得操作數(shù)。
指令代碼 操作碼 �。遥牛牵ú僮鲾�(shù))
當(dāng)然此處的操作數(shù)可能不是一個(gè),但要求是REG,也就是操作數(shù)存儲(chǔ)在寄存器中,根據(jù)操作碼定義的操作在REG中取操作數(shù)。
MOV �。粒�,BX
MOV �。拢�,AL
MOV �。拢�,DX
MOV DS,AX
很顯然操作碼后邊的操作數(shù)都是REG,有通用寄存器,也有段寄存器,至于專用寄存器教程中沒(méi)有涉及到,不知道能不能用。CPU內(nèi)的寄存器有三類14種,分類如下:
通用寄存器
|
專用寄存器
|
段寄存器
|
|||||||||||
數(shù)據(jù)寄存器
|
指針寄存器
|
變址寄存器
|
指令指針
IP
|
狀態(tài)指針
FLAG
|
代碼段
CS
|
數(shù)據(jù)段
DS
|
堆棧段
SS
|
附加段
ES
|
|||||
AX
|
BX
|
CX
|
DX
|
堆棧指針SP
|
基址指針BP
|
源變址
SI
|
目的變址
DI
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
指令所需的操作數(shù)直接在指令代碼中,隨著取指令(代碼段中)一起取到BIU的指令隊(duì)列中,常用來(lái)提供常數(shù),且立即數(shù)只能做源操作數(shù)。
�。停希帧 。茫�,1000H
�。停希帧 。粒�,0AH
MOV �。粒�,'A'
MOV �。模�,"AB"
以下4種尋址方式為存儲(chǔ)器尋址方式,操作數(shù)在內(nèi)存儲(chǔ)器中,在匯編語(yǔ)言程序中,根據(jù)存儲(chǔ)器按段劃分(不連續(xù))的思想,存儲(chǔ)單元地址使用邏輯地址:
段基址:偏移量
存儲(chǔ)器尋址方式重點(diǎn)是形成操作數(shù)邏輯地址的偏移量。這個(gè)偏移量是相對(duì)而言的,分偏移量組合形成最終偏移量也就是有效地址EA,雖然有效地址也不是物理地址,而是相對(duì)于段基址的邏輯地址。物理地址的算法:
物理地址=段基址×16+偏移量
有效地址EA是三個(gè)地址分量的某種組合:
(1)位移量:指令代碼中的一個(gè)8/16位二進(jìn)制數(shù)
(2)基地址:BX或BP得內(nèi)容
(3)變址量:SI或DI的內(nèi)容
正是上邊三種分量的組合形成了下面四種尋址方式(內(nèi)存儲(chǔ)器尋址方式):
直接尋址方式:
指令所需要的操作數(shù)在存儲(chǔ)器中,操作數(shù)的有效地址EA直接由指令代碼中的位移量提供。匯編指令中,直接尋址方式可用數(shù)值地址或符號(hào)(事先有宏定義)地址來(lái)表示。
指令代碼 操作碼�。�……�。∥灰屏浚ǎ�/16位)
MOV BX,[1000H]
MOV �。拢兀郑粒�
很顯然呀,后邊的操作數(shù)不加前綴有默認(rèn)的段基址,加前綴的就用那個(gè)段基址,因此操作數(shù)地址是完全確定的,這就是直接尋址方式。
寄存器間尋址方式:
指令所需要的操作數(shù)存在存儲(chǔ)器中,操作數(shù)的有效地址EA直接從寄存器SI/DI/BX/BP中獲得。當(dāng)然有效地址需要配合段基址形成實(shí)際地址。
指令代碼 操作碼|MOD�。遥牛恰 。遥�
注意兩點(diǎn):
①以SI、DI、BX間接尋址時(shí),隱含使用DS;
②以BP間接尋址時(shí),隱含使用SS;
MOV �。茫�,[SI]
MOV �。郏模桑荩粒�
MOV �。粒�,[BX]
MOV �。郏拢校�,DX
�。停希帧 。茫�,DS:[SI]
MOV �。模樱海郏模桑荩粒�
�。停希帧 。粒�,DS:[BX]
MOV �。樱樱海郏拢校荩模�
變址尋址或基址尋址方式:
指令所需要的操作數(shù)在存儲(chǔ)器中,操作數(shù)的有效地址EA是兩個(gè)地址分量之和。從下面的代碼格式可以看出它和上邊尋址方式的主要區(qū)別就是分量的增加。
指令代碼 操作碼�。。停希摹。遥牛恰 。遥汀。∥灰屏�
基址尋址:操作數(shù)的EA是SI或DI內(nèi)容與位移量之和。
變址尋址:操作數(shù)的EA是BX或BP內(nèi)容與位移量之和。