形成操作數(shù)或指令地址的方式,稱為尋址方式。8086有七種尋址方式:立即數(shù)尋址方式 、寄存器尋址方式 、直接尋址方式 、寄存器間接尋址方式 、寄存器相對尋址方式 、基址變址尋址方式 、相對基址變址尋址方式。
1)立即數(shù)尋址方式
操作數(shù)作為指令的一部分存放在操作碼之后的內(nèi)存單元中這種操作數(shù)被稱為立即數(shù)
8位數(shù)值(00H~FFH)
16位數(shù)值(0000H~FFFFH)
立即數(shù)尋址方式常用來給寄存器賦值
2)寄存器尋址方式
1.有效地址
有效地址(EA)=位移量(disp)+基址(base)+變址(index)
位移量:存放在指令中的數(shù),但它不是立即數(shù),而是一個地址,可以用變量或標(biāo)號表示。
基址:存放在基址寄存器(BX、BP)中,有效地址的基址部分。
變址:存放在變址寄存器(SI、DI)中,有效地址的變址部分。
2.段前綴使用規(guī)則
8086允許程序員用段跨越前綴來改變系統(tǒng)所指定的默認(rèn)段,如:允許數(shù)據(jù)存放在DS以外的段中,使用時指明段前綴,但是有些情況是不可以修改的。
(1)串處理操作中目的串必須用ES段,即默認(rèn)為ES:DI,不可修改。
(2)壓棧(push)、彈棧(pop)必須使用SS段,即默認(rèn)為SS:SP不可修改。
(3)指令必須存放在CS段中。
3) 直接尋址
操作數(shù)的地址中的偏移量直接跟在操作碼之后,默認(rèn)情況下基址存放在DS中,這個時候不需要加前綴,如果是加了別的前綴,如ES,則表示基址在ES中。
例如:
movax,[4000h]
movax,value (如果我們在前面定義了“符號地址”value=4000h,那么這句和上面的是一樣的)
data segment
W dw 4
X dw 5
Y dw 1
data ends
這里的 W,X,Y就是符號地址,它代表變量的在段中偏移量。
這個時候我們就可以使用:
MOV AX, W
這里表示的W表示的就是偏移量,所以屬于直接尋址。
4)寄存器間接尋址方式
有效地址在寄存器SI/DI/BX/BP中
若在SI、DI、BX中,則操作數(shù)默認(rèn)在數(shù)據(jù)段
若在BP中,則操作數(shù)默認(rèn)在堆棧段
操作數(shù)在存儲器中,而其有效地址存放在某個寄存器中,可用寄存器有 BX、BP、SI、DI。
區(qū)別于寄存器尋址,前者操作數(shù)存放在寄存器中,在指令中存放相應(yīng)的寄存器號碼,不需要訪存;后者的寄存器存放操作數(shù)的有效地址,而操作數(shù)本身在存儲器中。指令要先通過該寄存器獲取操作數(shù)有效地址,在通過該地址訪存獲取操作數(shù)。
同樣也可以為其指定其他段前綴。
圖形示意:
代碼示意:
mov ax,[bx] ;假設(shè) (ds) = 2000H,(bx) = 1000H ,則執(zhí)行結(jié)果為:(ax) = (21000) ,即取出存儲單元 21000H-21001H 位置的值賦給 ax
5)寄存器相對尋址方式
(1)基址相對尋址
對于BX寄存器來說,使用DS作為基址寄存器。例如:
mov ax,count[bx] 或 movax, [count+bx] ------DS基址,上面2條指令作用是相同的。
對于BP寄存器來說,使用SS作為基址寄存器。
例如:
mov ax,count[bp] 或 movax, [count+bp] ------SS基址
(2)變址相對尋址
使用2個變址寄存器si,di.例如:
movax, count[si] 或 mov ax,[count+si]
movax, count[di] 或 mov ax,[count+di]
最后的物理地址計算總體是這樣的:
物理地址=16D*(DS)+(BX)+8
或(SI)或16位位移量
或(DI)
物理地址=16D*(SS)+(BP)+8位位移量
或16位位移量
6)基址變址尋址方式
操作數(shù)有效地址等于基址寄存器與變址寄存器內(nèi)容之和,可使用寄存器有 BX、BP、SI、DI。
有效地址(EA)= 基址 + 變址。
圖形示意:
代碼示意:
mov ax, [bx][di]/[bx+di] ;假設(shè) (ds) = 2100H ,(bx) = 0158H ,(di) = 10A5H ,則執(zhí)行結(jié)果為:(ax) = (221FDH),即取出存儲單元 221FDH-221FEH 位置的值賦給 ax
7)相對基址變址尋址方式
有效地址是基址寄存器(BX/BP)、變址寄存器(SI/DI)與一個8位或16位位移量之和:
EA=[BX]/[BP]+[SI]/[DI]+8/16位位移量
評論