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指令系統的定址方式分為兩大類 資料定址方式和地址定址方式。指令定址方式將在以後的章節中結合控制轉移指令加以討論。機器執行指令的目的就是對指定的運算元完成規定的操作,將操作結果存入規...