首頁  >  文章  >  記憶體運算元的定址方式有哪幾種

記憶體運算元的定址方式有哪幾種

青灯夜游
青灯夜游原創
2020-07-28 14:24:4916321瀏覽

記憶體運算元的定址方式有:直接定址、暫存器間接定址、暫存器相對尋址、基址變址定址、基址變址相對尋址。

記憶體運算元的定址方式有哪幾種

記憶體運算元的定址方式

TIPS:

♥指令操作的物件在記憶體中,表現形式為[ ]

♥ 指令給出運算物件在記憶體某個邏輯段中的偏移位址:[偏移位址]

♥邏輯段的段基位址透過預設重設方式給出

♥記憶體運算元的字長本身並不確定,其字長取決於另一個暫存器運算元,或透過其他方式指定字長

1. 直接定址

指令直接給出運算元的偏移位址

eg:MOV AX,[1200H]    ;將資料段1200H位置的內容存放給AL中,1201H的內容存放給AH中

直接尋址方式下,操作數預設在資料段,但允許段重設,即由指令給出所在邏輯段

eg:MOV AX,ES:[1200H]   ;將附加段落1200 H位置的內容存放給AL中,1201H的內容存放給AH中

#個人理解

加上[ ]就表示需要到暫存器以外的地方尋找位址了,此時應先考慮在記憶體的哪個段,然後直接找這個段所給的位置。一般來說預設在資料段。

2. 暫存器間接定址

#※ 運算元存放在記憶體中,資料在記憶體中的偏移位址為方括號[ ]中通用暫存器的內容。

常用四個通用暫存器(這四個暫存器又叫做間址暫存器,分別是BX、BP、SI、DI),可用來存放資料的偏移位址。 (間址暫存器又分為基址暫存器BX、BP與變址暫存器SI、DI)

間接定址的一般格式

eg:MOV BX,1200H    ;這裡是立即定址,即將操作數直接送給BX,此時BX=1200H

MOV AX,[BX]  ;這裡是[BX] =[1200H],所以就轉換成了直接尋址,只是多了BX這個中間代理,此時將代碼段中的偏移地址為1200H的單元內容賦值給AL,1201H單元的內容賦值為AH

間接定址就是由暫存器間接給予運算元的偏移位址

#※運算元的段位址(運算元處於哪一個區段)取決於選擇哪一個間址暫存器(可以段重設)

BX、SI、DI預設在資料段;BP預設在堆疊段

個人理解

我們可以透過選擇的間址暫存器找到對應段,然後透過段的偏移量找到物理位置。當間接定址時,我們就可以找到來源運算元的實體位置。

物理位置=段基底位址*16 偏移位址。

3. 暫存器相對尋址

#※ 運算元的偏移位址為暫存器的內容加上一個位移量

eg:MOV AX,2000H     ;立即定址,2000H賦給AX

MOV DS,AX        ;DS從AX這裡取得段首位址

MOV BX,1200H     ;立即定址,將1200H賦給BX

MOV AL,[BX]5       ;相對尋址,將位於段基位址為2000H,偏斜移量為1200H 5的內容賦給AL

相對尋址主要用於一維數組的操作

常將位移量作為表頭位址,間址暫存器的值作為表內相對位址(使用間會有常數,會有不便)

#※ 個人理解

相對尋址就是在間接尋址的基礎上增加了一個位移常數,因此判別是間接尋址還是相對尋址的方法就是:看間址寄存器前後有沒有常數,有常數的就是相對尋址

4. 基址變址定址

#※ 運算元的偏移位址為

一個基址暫存器(BX、BP)的內容一個變址暫存器(SI、DI)的內容

其中BX預設在資料段BP預設在堆疊段

操作數的段位址由選擇的基址暫存器決定

#※ 同相對尋址一樣,主要用於一維數組的操作

eg:MOV SI,1100H   ;立即尋址,1100H賦值給SI

MOV BX,SI       ;將1100H賦值給BX

MOV AX,[SI BX]  ;來源運算元的實體位址=資料段段基底位址*16 1100H 1100H

個人理解

基址變址尋址就是先找到基址暫存器所在的段首位址,再加上基址暫存器偏移量和變址暫存器的偏移量。它所存在的特徵是[BX][BP]兩者必有其一,[SI][DI]兩者必有其一

##5. 基底地址變址相對定址

運算元的偏移位址為

基址暫存器變址暫存器位移量

運算元的段位址由選取的基址暫存器決定

基址變址相對定址方式主要用於二維數組的運算

eg:MOV DI,1100H   ;立即定址,將1100H賦給DI

MOV BP,DI       ;將1100H賦給BP

MOV AL,[BP][DI]5   ;BP說明操作數在堆疊段,其物理位址=堆疊段段段位址*16 1100H 1100H 5

#※

個人理解

基址變址相對定址只是在基址變址的基礎上增加了一個常數偏移量,其來源操作數的物理位址便可以由此把握。

更多相關知識,請造訪:

PHP中文網

以上是記憶體運算元的定址方式有哪幾種的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn