三 定址方式

2021-05-25 20:18:28 字數 3939 閱讀 1561

rel="file-list" href="file:///c:%5cdocume%7e1%5cadmini%7e1%5clocals%7e1%5ctemp%5cmsohtml1%5c03%5cclip_filelist.xml">掌握32

位位址的定址方式及其定址公式的特殊性。

熟練掌握立即定址、暫存器定址、直接定址、暫存器間接定址、暫存器相對定址、基址加變址定址、相對基址加變址定址的各定址方式中,其定位運算元的基本過程。

在cpu的指令系統中,除nop(空操作指令)、hlt(停機指令)等少數指令之外,大量的指令在操作過程中都會涉及運算元。

立即數定址方式:運算元作為指令的一部分而直接寫在指令中,這種運算元稱為立即數,這種定址方式也就稱為立即數定址方式。

組合語言中,如果是雙運算元指令,逗號前面的為目標運算元,逗號後面的為源運算元。例如:movax,bx;ax為目標運算元,bx為源運算元。立即數不能做為目標運算元,但可以作為源運算元

立即數定址方式通常用於對通用暫存器或記憶體單元賦初值。

暫存器定址方式:指令所要的運算元已儲存在某暫存器中,或把目標運算元存入暫存器。把在指令中指出所使用暫存器的定址方式稱作暫存器定址方式。

源和目的運算元都可以是暫存器.

8位的暫存器:ah、al、bh、bl、ch、cl、dh、dl

16位的暫存器:ax、bx、cx、dx、si、di、sp、bp

32位的暫存器:eax、ebx、ecx、edx、esi、edi、esp、ebp

在指令執行過程中,會減少讀/寫儲存器單元的次數, 有較快的執行速度.

直接定址方式:指令所要的運算元存放在記憶體中,在指令中直接給出該運算元的有效位址的定址方式叫做直接定址方式。

在通常情況下,運算元存放在資料段中,所以,其實體地址將由資料段暫存器ds和指令中給出的有效位址直接形成,但如果使用段超越字首,那麼,運算元可存放在其它段。直接定址方式常用於處理記憶體單元的資料,其運算元是記憶體變數的值,該定址方式可在64k位元組的段內進行定址。立即定址方式和直接定址方式的書寫格式的不同,直接定址的位址要寫在括號「[」,「]」內。在程式中,直接位址通常用記憶體變數名來表示。

movax, 1234h mov

ax, [1234h] ;前者是立即定址,後者是直接定址

movax, varw mov

ax, [varw] ;兩者是等效的,均為直接定址

暫存器間接定址:運算元在儲存器中,運算元的有效位址用si、di、bx、bp(儲存器指標)之一來指定的定址方式為暫存器間接定址方式。

在不使用段超越字首的情況下,有下列規定:1

若有效位址用si、di和bx等之一來指定,則其預設的段暫存器為ds;2

若有效位址用bp來指定,則其預設的段暫存器為ss(即:堆疊段)。

例:mov bx,[di],在執行時,(ds)=1000h,(di)=2345h,儲存單元12345h的內容是4354h。執行指令後,bx的值是4354h!

暫存器相對定址方式:與暫存器間接定址方式在運算元的有效位址的計算上存在區別,其他的基本相同。區別:其有效位址是乙個儲存器指標的內容和指令中的8位/16位偏移量之和。

在計算有效位址時,如果偏移量是8位,則進行符號擴充套件成16位。當所得的有效位址超過0ffffh,則取其64k的模。(不甚懂)

例:mov bx, [si+100h],在執行它時,(ds)=1000h,(si)=2345h,記憶體單元12445h的內容為2715h,該指令執行後,bx的值是2715h!

基址加變址定址方式:運算元在儲存器中,其有效位址是乙個基址暫存器(bx、bp)和乙個變址暫存器(si、di)內容之和的定址方式為基址加變址定址方式。

規定:如果有效位址中含有bp,則預設的段暫存器為ss;否則,預設的段暫存器為ds。

例:mov bx, [bx+si],在執行時,(ds)=1000h,(bx)=2100h,(si)=0011h,記憶體單元12111h的內容為1234h。該指令執行後,bx的值是1234h!

相對基址加變址定址方式:與基址加變址定址方式在運算元的有效位址的計算上存在區別,其他的基本相同。區別:其有效位址是乙個基址暫存器(bx、bp)、乙個變址暫存器(si、di)和指令中的8位/16位偏移量之和。

從相對基址加變址這種定址方式來看,由於它的可變因素較多,看起來就顯得複雜些,但正因為其可變因素多,它的靈活性也就很高。相對基址加變址定址方式是以上

7種定址方式中最複雜的一種定址方式,它可變形為其它型別的儲存器定址方式。

例:mov ax, [bx+si+200h],在執行時,(ds)=1000h,(bx)=2100h,(si)=0010h,記憶體單元12310h的內容為1234h。該指令執行後,ax的值是1234h!

源運算元

指令的變形

源運算元的定址方式

只有偏移量

movax, [100h]

直接定址方式

只有乙個暫存器

movax, [bx] 或mov ax, [si]

暫存器間接定址方式

有乙個暫存器和偏移量

movax, [bx+100h] 或 mov ax, [si+100h]

暫存器相對定址方式

有二個暫存器

movax, [bx+si]

基址加變址定址方式

有二個暫存器和偏移量

movax, [bx+si+100h]

相對基址加變址定址方式

32在用16位暫存器來訪問儲存器單元時,只能使用基位址暫存器(bx和bp)和變址暫存器(si和di)來作為位址偏移量(有效位址)的一部分,但在用32位暫存器定址時,不存在上述限制,所有32位暫存器(eax、ebx、ecx、edx、esi、edi、ebp和esp)都可以是位址偏移量的乙個組成部分。

當用32位位址偏移量進行定址時,記憶體位址的偏移量可分為三部分:乙個32位基址暫存器,乙個可乘1、2、4或8的32位變址暫存器,乙個8位/32位的偏移常量,並且這三部分還可進行任意組合,省去其中之一或之二。

32位基址暫存器是:eax、ebx、ecx、edx

esi、edi

ebp、esp;

32位變址暫存器是:eax、ebx、ecx、edx

esi、edi

ebp(

除esp之外)。

規定:1

位址中暫存器的書寫順序決定該暫存器是基址暫存器,還是變址暫存器。如:[ebx+ebp]中的ebx是基址暫存器,ebp是變址暫存器,而[ebp+ebx]中的ebp是基址暫存器,ebx是變址暫存器2

預設段暫存器的選用取決於基址暫存器,基址暫存器是ebp或esp時,預設的段暫存器是ss,否則,預設的段暫存器是ds。3

在指令中,如果使用段字首的方式,那麼,顯式段暫存器優先。

舉例指令:

mov ax, [123456h]mov eax, [ebx]mov ebx, [ecx*2]mov ebx, [eax+100h]

mov edx, [eax*4+200h]mov ebx, [eax+edx*2]mov ebx, [eax+edx*2+300h]

mov ax, [esp]

指令的舉例

訪問記憶體單元所用的段暫存器

mov  ax, [123456h]

;預設段暫存器ds

mov  eax, [ebx+ebp]

;預設段暫存器ds

mov  ebx, [ebp+ebx]

;預設段暫存器ss

mov  ebx, [eax+100h]

;預設段暫存器ds

mov  edx, es:[eax*4+200h]

;顯式段暫存器es

mov  [esp+edx*2], ax 

;預設段暫存器ss

mov  ebx, gs:[eax+edx*2+300h]

;顯式段暫存器gs

mov  ax, [esp] 

;預設段暫存器ss

我的

本章小結:

暫存器加上8/16位偏移量]

定址 定址方式

定址方式就是處理器根據指令中給出的位址資訊來尋找實體地址的方式。在儲存器中,運算元或指令字寫入或讀出的方式,有位址指定方式 相聯儲存方式和堆疊訪問方式。幾乎所有的計算機,在記憶體中都採用位址指定方式。當採用位址指定方式時,形成運算元或指令位址的方式稱為定址方式。定址方式分為兩類,即指令定址方式和資料...

七種定址方式 直接定址方式

指令所要的運算元存放在記憶體中,在指令中直接給出該運算元的有效位址,這種定址方式為直接定址方式。在通常情況下,運算元存放在資料段中,所以,其實體地址將由資料段暫存器ds和指令中給出的有效位址直接形成,但如果使用段超越字首,那麼,運算元可存放在其它段。例 假設有指令 mov bx,1234h 在執行時...

定址方式 第三章

定址方式 有效位址 運算元所在單元的位址 定址方式 產生有效位址的方式 8086的定址方式有 1 立即定址 2 直接定址 3 暫存器定址 4 暫存器間接定址 5 基址定址 6 變址定址 7 基址變址定址 8 相對基址變址定址 1.立即定址 運算元直接放在指令中,緊跟在操作碼之後 立即定址示例eg1 ...