組合語言 80x86定址方式

2021-09-25 05:24:44 字數 2393 閱讀 7509

1、立即定址方式

立即定址方式中指令的運算元是8位或16位立即數,並直接出現在指令中。例如:

mov al,10h

;源運算元為立即定址;執行後al=10h

mov ax,0a48h

;源運算元為立即定址;執行後ax=0a48h

立即定址只能用於源運算元,不能用於目的運算元。

2、暫存器定址方式

暫存器定址方式的運算元是暫存器的值,指令中使用暫存器名,包括8位或16位通用暫存器和段暫存器。fs和gs只能用於80386及更高的cpu。例如:

mov si,0

;目的運算元是暫存器定址;執行後si=0

mov dl,ah

;兩個運算元均為暫存器定址;執行後ah不變,dl=ah

mov ds,ax

;兩個運算元均為暫存器定址;執行後ax不變,ds=ax

對於暫存器定址方式,由於運算元在cpu內部的暫存器中,不需要訪問記憶體,因為執行速度較快,是經常採用的方法。另外,若使用累加器ax或al作為目的運算元存放結果,指令的機器**通常會更短、執行速度更快。

3、記憶體定址方式

雖然暫存器定址速度較快,但cpu中的暫存器數目畢竟有限,不可能把所有參加運算的資料都存放在暫存器中。因此,大多數情況下,運算元需要存放在記憶體中。

在記憶體定址方式中,運算元是某個記憶體單元的內容,指令中給出的是記憶體單元的有效位址ea(即偏移位址),段位址通常在隱含的某個段暫存器中。

(1)直接定址。直接定址方式的運算元的形式為:

variable或【variable】

其中,variable是變數名。變數是乙個符號位址,是用來定義資料的。

預設的段位址在ds段暫存器,可以使用段超越字首改變

例如,設x是已定義的字型別變數,y是位元組型別的變數,則:

mov ax,x

;將x中的乙個字送ax,等價於mov ax,[x]

mov al,y

;將y中的乙個位元組送給al,等價於mov al,[y]

(2)暫存器間接定址。暫存器間接定址方式的運算元形式為:

【reg】

其中,reg只能是bx,bp,si,di。

有效位址是reg的值

隱含的段位址在ds或者ss中。例如:

mov dx,[si]

;將ds:si所指記憶體單元的乙個字送dx

mov dx,[bp]

;將ss:bp所指記憶體單元的乙個字送dx

(3)變址定址(暫存器相對定址)。變址定址方式的運算元的形式為:

disp【reg】

其中,disp表示8位或16位位移量,是常數。reg只能是bp,bx,si,di。

有效位址=reg+disp。

隱含的段位址在ds或者ss中。例如:

mov ax,2[bx]

;源運算元段位址=ds,有效位址=bx+2

mov ax,2[bp]

;源運算元段位址=ss,有效位址=bp+2

(4)基址變址定址。基址變址定址方式的運算元形式為:

【base】【index】

其中,base只能是基址暫存器bx,bp,index只能是變址暫存器si,di。

有效位址=base+index。

隱含的段位址在ds或者ss中。例如:

mov ax,[bx][di]

;源運算元段位址=ds,有效位址=bx+di

mov ax,[bp][di]

;源運算元段位址=ss,有效位址=bp+di

(5)相對基址變址定址。相對基址變址定址方式的運算元形式為:

disp【base】【index】

其中,disp是8位或16位位移量,是常數。base只能是bx,bp,index只能是di,si。

有效位址=base+index+disp。

隱含的段位址在ds或者ss中。例如:

mov ax,2[bx][si]

;源運算元段位址=ds,有效位址=bx+si+2

mov ax,2[bp][si]

;源運算元段位址=ss,有效位址=bp+si+2

4、段超越

當運算元在記憶體單元時,系統根據隱含約定,自動將段暫存器ds,ss的值作為段位址。然而,當運算元段位址不在隱含的段暫存器時,可以使用段超越字首取代其隱含約定。

段超越字首形式為:

段暫存器名:

可以使用任一段暫存器進行段超越,但只能在記憶體運算元之前。例如:

mov ax,ds:[bp]

;段位址在ds

mov ax,cs:[bx][si]

;段位址在cs

80x86組合語言定址方式介紹

運算元直接包含在指令 中,可以是8或者16位。立即數作為指令的一部分,直接從biu指令佇列取出,因此速度更快。唯一缺點 只能作為源運算元。指令中所需的運算元在cpu某個暫存器中,可以是8位 16位段暫存器,這個操作完全在cpu內部,因此執行也很快。以下指令需要cpu以外的東西參與用符號或者常數表示 ...

80X86定址方式

1 與定址相關的暫存器 8086 暫存器 段暫存器cs ds es ss 基址暫存器bx bp 變址暫存器di si 專用暫存器ip sp 具體每個暫存器的作用就不仔細介紹了。80386 及其以上的暫存器 段暫存器cs ds es ss fs,gs 基址暫存器eax ebx ecx edx ebp ...

80X86定址方式總結

一 概論 擇子存放在六個段暫存器 cs,ss,ds,es,fs,gs 中 段總是由 cs 段暫存器來指示 堆疊段總是由 ss 段暫存器來指示 字元處理指令總是使用 es 段暫存器作為目標運算元的段暫存器 一般的資料段可用 ds es fs gs來指示,但 ds 作為資料段的預設段暫存器,用它來定址比...