關於8086定址方式

時間 2021-09-02 04:48:44

1樓:匿名使用者

是指cpu在執行指令時尋找運算元或運算元地址的方式。

1. 立即定址:直接放在指令中的常數稱為立即數,立即數只能是源運算元,立即數存放在指令操作碼之後的儲存單元中。

例:mov al,50h

2. 暫存器定址:存放在暫存器中的資料為運算元,暫存器運算元可以是源運算元,也可以是目的運算元。

例:mov al,bl

以下定址方式3~8,運算元都在儲存器中。儲存器運算元具有型別屬性,如位元組(byte)、字(word)、雙字(dword)等,反映了資料佔用儲存單元的位元組數,指令書寫中,約定用方括號內容表示儲存器運算元的偏移地址;用型別名 ptr 偏移地址的形式說明指令中儲存器運算元的型別,例:word ptr [1000h];用變數名db/dw/dd資料序列的形式分別定義具有“變數名”的位元組、字或雙字儲存器運算元,如buf db 10h,20h。

3. 儲存器定址

(1)直接定址:儲存器運算元的16位偏移地址直接包含在指令的方括號中。

例:mov al,[1000h] 約定由ds提供段地址

mov al,cs:[1000h] ;段超越,由cs提供段地址

mov al,ss:[1000h] ;段超越,由ss提供段地址

(2)暫存器間接定址:運算元所在的儲存單元的偏移地址放在指令給出的暫存器中。可用於這種定址方式的暫存器只能是si、di、bp和bx。

其中,si、di、bx約定的段暫存器是ds,而bp約定的段暫存器ss。

例:mov ax,[si] ;ax←ds:[si]

mov [bx],ax ;ds:[bx]←ax

(3)基址定址:運算元的有效地址是指令給定的位移量(8位或16位)與bx、bp內容之和,段暫存器約定同暫存器間接定址,允許段超越。

例:mov ax,[bx+3ah] ;ax←ds:[bx+3ah]

mov [bp+4eb3h],ax;ss:[bp+4eb3h]←ax

(4)變址定址:運算元的有效地址是指令給定的位移量與暫存器si或di內容之和,段暫存器約定在ds中,允許段超越。

例:mov [di+12h],ax ;ds:[di+12h] ←ax

mov bx,ss:[di+45h] ;bx←ss:[di+45h]

(5)基址變址定址:運算元的有效地址是指令給定的位移量和一個基址暫存器(bx或bp)及一個變址暫存器(si或di)的內容之和,段暫存器約定由基址暫存器決定,若為bx,段暫存器約定為ds;若為bp,段暫存器約定為ss,允許段超越。

例:mov bx,[di+bp+45h] ;bx←ss:[di+bp+45h]

mov ax,es:[si+bx+76h];ax←es:[si+bx+76h]

注意:基址暫存器bx和bp不能同時出現在一個方括號內,變址暫存器di和si亦如此。

(6)串定址:用於資料串操作指令,它隱含地運用:si指出源串偏移地址,di指出目的串偏移地址,指令執行後,si和di的內容自動加1或減1(運算元為位元組型別時)、加2或減2(運算元為字型別時);約定源串段地址在ds中,目的串段地址在es中。

不允許段超越。

例:movsb ;es:[di] ←ds:[si],si←si 1,di←di 1

movsw ;es:[di] ←ds:[si],si←si 2,di←di 2

(7)埠定址:運算元在外設埠中。

直接埠定址:指令中直接給出的8位常數是外設埠地址。

例:in al,34h ;al←[34h]

out 34h,al ;[34h]←al

間接埠定址:指令中外設埠的16位地址在dx中。

例:mov dx,280h

in al,dx ;al←[280h]

out dx,al ;[280h]←al

(8)隱含定址:指令中沒有給出運算元,但卻隱含在固定物件中。

例:aaa ;隱含對al操作,

2樓:匿名使用者

1. 定址方式概念

定址方式 是指在指令中用以說明運算元所在地址(位置)的方法。

段超越 不是按照系統的約定,而是在指令中指定某一段暫存器作為儲存器運算元的段地址。

[注]8086/8086指令系統對儲存單元的訪問,其段地址都是從系統事先約定好的段暫存器中獲取,若不遵循系統的約定,則要制定段暫存器,即段超越。

2. 與運算元有關的定址方式

(1)立即定址方式:運算元含在指令**中,由指令直接給出。

例如:mov al,50

mov bx,1000h

(2)暫存器定址方式:指令中指定某個暫存器的內容作為運算元。

例如:mov al,bl

add al,5

mov data,al

(3)直接定址方式:指令中直接給出運算元的地址(偏移地址)。

例如:mov al,[100h]

mov bx,es:[100h]

mov data,-1

mov byte ptr[1000h],0

(4)暫存器間接定址方式:指令中指定某個暫存器(si、di、bx、bp)中的一個內容作為運算元的地址(偏移地址)。

例如:mov ax,[bx]

mov [bp],al

mov ds:[bp],ax

mov word ptr[si],-1

(5)暫存器相對定址方式:指令中指定某暫存器內容與一個位移量相加作為運算元的地址(偏移地址)。

例如:mov ax,[si+2]

mov [bp-6h],al

add byte ptr[bx+10h],5

mov bx,data[si]

mov data[bp],0

(6)基址變址定址方式:指令中,指定一變址暫存器內容與基址暫存器內容相加作為運算元的地址。

例如:mov al,[bx+si]

mov [di+bx],dx

add [bp+si],al

3樓:匿名使用者

以 mov 指令為例

1. 立即定址方式* —— 運算元在指令中給出

mov al, 5

mov ax, 3064h

* 只能用於src欄位 ? mov 5, al

* src 和 dst的字長一致 ? mov ah, 3064h

2. 暫存器定址方式* —— 運算元在指定的暫存器中

mov ax, bx

mov al, bh

* 位元組暫存器只有 ah al bh bl ch cl dh dl

* src 和 dst的字長一致 mov ah, bx

* cs不能用mov指令改變 mov cs, ax

3. 直接定址方式* —— 有效地址ea由指令直接給出

有效地址ea:運算元的偏移地址

實體地址pa = 16d ? (ds) + ea

例:mov ax, [2000h]

ea=2000h, 假設(ds)=3000h, 那麼(pa)=32000h

例:運算元地址可由變數(符號地址)表示

mov ah, value ( value db 10 )

* 隱含的段為資料段 ds

* 可使用段跨越字首 mov ax, es :[2000h]

* 使用變數時,要注意變數的屬性

value db 10

mov ax, value ;錯誤

mov al, value

mov ax, word ptr value

* 適於處理單個變數

4. 暫存器間接定址方式

* ——ea在基址暫存器(bx/bp) 或變址暫存器(si/di)中

bx, si, di ->(ds)

實體地址 = 16d * (ds) + (bx)

實體地址 = 16d * (ds) + (si)

實體地址 = 16d * (ds) + (di)

bp ->(ss)

實體地址 = 16d * (ss) + (bp)

mov ax, [bx]

pa = 16d *(ds) + (bx)

mov es:[bx] , ax

pa = 16d *(es) + (bx)

mov dx, [bp]

pa = 16d *(ss) + (bp)

暫存器間接定址方式*

* 不允許使用ax、cx、dx存放ea

mov ax, [cx];錯誤

* src 和 dst的字長一致

mov dl, [si] ; [bx]指示一個位元組單元

mov dx, [di] ; [bx]指示一個字單元

* 適於對陣列、字串、**中的資料連續處理

5. 暫存器相對定址方式*

有效地址 = (bx) + 8位或者16或位移量

有效地址 = (bp) + 8位或者16或位移量

有效地址 = (si) + 8位或者16或位移量

有效地址 = (di) + 8位或者16或位移量

例: mov ax, count[si] 或 mov ax, [count+si]

假設(ds)=3000h, (si)=2000h, count=3000h 那麼 pa = 35000h

假設(35000h)=1234h, 那麼 (ax)=1234h

* 適於陣列、字串、**的處理

6. 基址變址定址方式*

有效地址 = (bx) + (si)

有效地址 = (bx) + (di)

有效地址 = (bp) + (si)

有效地址 = (bp) + (di)

mov ax, [bx][di]

pa=(ds)×16d+(bx)+(di)

或 mov ax, [bp+di]

pa=(ss)×16d+(bx)+(di)

mov ax, es:[bx][si]

pa=(es)×16d+(bx)+(si)

* 適於陣列、字串、**的處理

* 必須是一個基址暫存器和一個變址暫存器的組合

mov ax, [bx][bp] ;錯誤

mov ax, [si][di] ;錯誤

7. 相對基址變址定址方式*

有效地址 = (bx) + (si) + 8位或者16或位移量

有效地址 = (bx) + (di) + 8位或者16或位移量

有效地址 = (bp) + (si) + 8位或者16或位移量

有效地址 = (bp) + (di) + 8位或者16或位移量

mov ax, mask[bx][si]

或 mov ax, mask[bx+si]

或 mov ax, [mask+bx+si]

* 適於堆疊處理和陣列處理

8086指令系統的定址方式有哪些

8086指令系統的定址方式主要有立即數定址 暫存器定址 儲存器定址和i o埠定址。其中,儲存器定址可進一步分為直接定址 暫存器間接定址 暫存器相對定址 基址變址定址 相對基址變址定址 i o埠指令in和out使用的埠定址方式有直接定址和間接定址。 以 mov 指令為例 1.立即定址方式 運算元在指令...

在暫存器間接定址方式中,運算元應在中

哆啦a夢是夢想家 c.儲存單元 暫存器間接定址方式中,暫存器記憶體放的是運算元的地址,而不是運算元本身,即運算元是通過暫存器間接得到的,因此稱為暫存器間接定址。運算元放在ram某個儲存單元中,該單元的地址又放在暫存器r0或r1中。如要進行算術運算,要計算每班學員各科成績的平均值,可以編一個求平均成績...

8088各種定址方式中,段暫存器和便宜地址的組合方式

韓禎祺 定址方式,就是指指令中給出的尋找運算元 包括資料運算元和地址運算元 的方法。根據運算元的種類,8086 8088指令系統的定址方式分為兩大類 資料定址方式和地址定址方式。指令定址方式將在以後的章節中結合控制轉移指令加以討論。機器執行指令的目的就是對指定的運算元完成規定的操作,將操作結果存入規...