1、立即尋址
立即尋址 也叫 立即 數(shù) 尋址 ,這是一種特殊的 尋址 方式,操作數(shù)本身就在指令中給出,只要取出指令也就取到了操作數(shù), 立即尋址方式中,指令操作碼和操作數(shù)都在存儲(chǔ)器代碼段中;立即數(shù)可以是用 8 位或 16 位二進(jìn)制補(bǔ)碼表示的有符號(hào)數(shù)。
功能:常用于給寄存器賦初值,只能用于源操作數(shù)字段,且源操作數(shù)與目的操作數(shù)長(zhǎng)度應(yīng)一致。
【例】 mov ax , 10
執(zhí)行后( ax ) = ?
該例中源操作數(shù)為立即尋址方式,立即數(shù)為 10 ,存放在指令的下一單元。
執(zhí)行: 10 → ax
執(zhí)行后:( ax ) =000ah
2、寄存器尋址
一般計(jì)算機(jī)都設(shè)置有一定數(shù)目的通用寄存器,用以存放操作數(shù),操作數(shù)的地址或中間結(jié)果。若指令地址碼部分給出某一通用寄存器的地址(即寄存器名),而且所需要的操作數(shù)就在這一寄存器中,則稱為寄存器尋址。
寄存器尋址方式的操作數(shù)在指令指明的寄存器中。
【例】下列程序執(zhí)行后,( ax ) = ?,( bx ) = ?
mov ax , 1234h
mov bx , 5678h
add ax , bx
該程序中 mov 指令為數(shù)據(jù)傳送指令操作符, add 指令為加法指令操作符,三條指令皆為雙操作數(shù)指令。第一、二條指令 ax 、 bx 皆為目的操作數(shù)地址,為寄存器尋址方式。第三條指令中, ax 為目的操作數(shù)地址, bx 為源操作數(shù)地址。源地址和目的地址皆為寄存器尋址方式。
執(zhí)行: 1234h → ax
5678h → bx
( ax ) + ( bx )→ ax
執(zhí)行后:( ax ) =68ach ,( bx ) =5678h
3、直接尋址
指令的地址碼部分直接給出的不是操作數(shù),而是操作數(shù)的存儲(chǔ)器地址,這種方式稱為直接尋址方式。根據(jù)指令地址碼部分給出的直接地址 a 就可以從存儲(chǔ)器中讀出所需要的操作數(shù)。這種尋址方式簡(jiǎn)單,直觀,也便于硬件實(shí)現(xiàn),但是隨著計(jì)算機(jī)的存儲(chǔ)器容量不斷擴(kuò)大,所需要的地址碼越來越長(zhǎng),勢(shì)必造成指令的一部分,不能修改,故只能用來訪問固定存儲(chǔ)器單元。
匯編格式:①含有變量的地址表達(dá)式。
②段寄存器名: [ea] 。
功能:指令下一字單元的內(nèi)容是操作數(shù)的有效(偏移)地址 ea 。
【例】寄存器和存儲(chǔ)器內(nèi)容為:( ax ) =1212h , buf 為數(shù)據(jù)段定義的變量,其偏移地址是 2000h ,( ds ) =3000h ,( 32000h ) =4545h 。
執(zhí)行指令: mov ax , buf ( mov ax , [2000h] )
執(zhí)行后:( ax ) =?
執(zhí)行:( 32000h )→ ax
執(zhí)行后:( ax ) =4545h
4、寄存器間接尋址
寄存器間接尋址方式中,寄存器的內(nèi)容為操作數(shù)的偏移地址 ea,操作數(shù)在存儲(chǔ)器中,操作數(shù)在存儲(chǔ)器中,操作數(shù)的有效地址用 si 、 di 、 bx 和 bp 等四個(gè)寄存器之一來指定。
匯編格式: [r]
功能:操作數(shù)存放在存儲(chǔ)器,寄存器 r 存放操作數(shù)的偏移地址 ea 。
在不使用段超越前綴的情況下,有下列規(guī)定:
若有效地址用 si 、 di 和 bx 等之一來指定,則其缺省的段寄存器為 ds ;
若有效地址用 bp 來指定,則其缺省的段寄存器為 ss( 即:堆棧段 ) 。
例: 假設(shè)有指令: movbx,[di] ,在執(zhí)行時(shí), (ds)=1000h , (di)=2345h ,存儲(chǔ)單元 12345h 的內(nèi)容是 4354h 。問執(zhí)行指令后, bx 的值是什么?
解:根據(jù)寄存器間接尋址方式的規(guī)則,在執(zhí)行本例指令時(shí),寄存器 di 的值不是操作數(shù),而是操作數(shù)的地址。該操作數(shù)的物理地址應(yīng)由 ds 和 di 的值形成,即:
pa=(ds)*16+di=1000h*16+2345h=12345h 。
偏移地址 ea 計(jì)算方法如下:
ea=[si] si 作間址寄存器。
ea=[di] di 作間址寄存器。
ea=[bx] bx 作間址寄存器。
ea=[bp] bp 作間址寄存器。
執(zhí)行指令: mov ax , [bp]
執(zhí)行后:( ax ) =?
執(zhí)行:( 20030h )→ ax
執(zhí)行后:( ax ) =1234h
【例】寄存器和存儲(chǔ)器內(nèi)容分別為:( ax ) =0 ,( bp ) =0030h ,( ss ) =2000h ,( 20030h ) =1234h