80X86定址方式

2021-05-21 22:51:42 字數 1887 閱讀 4968

1、

與定址相關的暫存器

8086 暫存器:段暫存器cs ,ds ,es ,ss ;基址暫存器bx ,bp ;變址暫存器di ,si ;專用暫存器ip ,sp 。具體每個暫存器的作用就不仔細介紹了。

80386 及其以上的暫存器:段暫存器cs ,ds ,es ,ss ,fs,gs ;基址暫存器eax ,ebx ,ecx ,edx ,ebp ;變址暫存器edi ,esi 。專用暫存器ip ,sp 。

2、

定址方法

由於8086 cpu 外部匯流排為20 位,所以cpu 可以通過外部匯流排定址1m (2^20 )的位址空間。但是cpu 的內部匯流排為16 位,只能定址64k(2^16) 位址空間。解決方法就是段位址+ 偏移量的做法。段位址存放在段暫存器(cs ,ds ,es ,ss )中。由於段位址也只是16 位,也不能定址1m 空間。怎麼辦呢?解決方法是:段位址*16+ 有效位址= 實體地址。

80386 及其公升級版本外部匯流排和內部匯流排都為32 位。按理說應該直接定址就可以達到4g (2^32 )位址空間。但是為了向前相容8086 ,其實現方式為:段位址+ 有效位址= 邏輯位址。注意是邏輯位址,而不是實體地址。在80386 之後的cpu 中,有邏輯位址,線性位址,實體地址的概念區分,這裡就不解釋了。邏輯位址轉換成實體地址,是聯結器或者作業系統的問題,目前我們暫時不關心。

3、

定址方式:

80x86 有多種定址模式,這裡分別做乙個簡單介紹:

1)

立即數定址:運算元直接存放在指令中,緊跟在操作碼之後。例如:

mov al,5

mov ax,034bh

2 )暫存器定址:運算元存在於暫存器中,指令指定暫存器。16 位運算元,暫存器可以為:ax,bx,cx,dx,si,di,sp,bp 。8 位運算元暫存器可以為:ah,al,bh,bl,ch,cl,dh,dl 。對於80386 及其以後的機型,32 位運算元可以存放在:eax ,ebx ,ecx ,edx ,ebp ,esp ,esi ,edi 。這種定址方式不需要訪問記憶體,所以取得較高的訪問速度。例如:

mov ax,bx

mov ecx,ebx

mov ax,[2000h]

假如:(ds )=3000h ,則(ax)=(3000h*10h+2000h) 。

4 )暫存器間接定址:運算元的有效位址只包含基址暫存器或者變址暫存器一種成分。凡是使用bp ,esp,ebp 暫存器時,預設段暫存器為ss ;其他情況下,預設暫存器都為ds 。例如:

mov ax,[bx]

假如(ds )=2000h ,(bx )=1000h ,則(ax )= ((ds )*10h+ (bx ))

5)暫存器相對定址:運算元的有效位址為基址暫存器或者變址暫存器的內容和指令中指定位移量的之和,所以有效位址有兩種成分組成。例如:

mov ax, count[si]

count 為16

位位移量,則(ax)

=((ds)*10h+(si)+count) 6

mov ax,[bx][si]

該指令相當於:

(ax)=((ds)*10h+(bx)+(si)) 7

mov ax,count[bx][si]

該指令相當於:

(ax)=((ds)*10h+(bx)+(si)+count) 8

)比例變址定址:運算元的有效位址是變址暫存器內容乘以指令中指定的比例因子再加上位移量之和,所以有效位址有三種成分組成。該定址方式只適用於

80386

及其以後機型。例如:

mov eax,count[si*4] 9

mov eax,[ebx][si*4] 10

)相對基址比例變址定址:運算元的有效位址是變址暫存器內容乘以指令中指定的比例因子加上基址暫存器內容,再加上指定位移量之和,例如:

mov eax,count[ebx][si*4]

80X86定址方式總結

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

80X86定址方式總結

80x86定址方式總結 sandrain zeq的專欄 部落格頻道 csdn.net 一 概論 擇子存放在六個段暫存器 cs,ss,ds,es,fs,gs 中 段總是由 cs 段暫存器來指示 堆疊段總是由 ss 段暫存器來指示 字元處理指令總是使用 es 段暫存器作為目標運算元的段暫存器 一般的資料...

組合語言 80x86定址方式

1 立即定址方式 立即定址方式中指令的運算元是8位或16位立即數,並直接出現在指令中。例如 mov al,10h 源運算元為立即定址 執行後al 10h mov ax,0a48h 源運算元為立即定址 執行後ax 0a48h 立即定址只能用於源運算元,不能用於目的運算元。2 暫存器定址方式 暫存器定址...