專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

基址變址尋址方式訪問(wèn)二維數(shù)組

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2010年09月15日   【字體:

位移量:數(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ù)尋址方式:

 
    指令所需的操作數(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)容與位移量之和。

關(guān)閉窗口

相關(guān)文章