暫存器與七種定址方式

2021-05-27 08:10:17 字數 4303 閱讀 2607

一、暫存器

總共有14個16位暫存器,8個8位暫存器

通用暫存器:

資料暫存器:

ah(8位)  al(8位)  ax(16位)   (ax和al又稱累加器)

bh(8位)  bl(8位)  bx(16位)   (bx又稱基址暫存器,唯一作為儲存器指標使用暫存器)  

ch(8位)  cl(8位)  cx(16位)   (cx用於字串操作,控制迴圈的次數,cl用於移位)

dh(8位)  dl(8位)  dx(16位)   (dx一般用來做32位的乘除法時存放被除數或者保留餘數)

指標暫存器:

sp 堆疊指標 (存放棧頂位址)

bp 基址指標 (存放堆疊基址偏移)

變址暫存器:主要用於存放某個儲存單元位址的偏移,或某組儲存單元開始位址的偏移,

即作為儲存器(短)指標使用。作為通用暫存器,它們可以儲存16位算術邏輯運算中的操

作數和運算結果,有時運算結果就是需要的儲存單元位址的偏移.

si 源位址  (源變址暫存器)

di 目的位址 (目的變址暫存器)

控制暫存器:

ip 指令指標

flag 標誌暫存器

① 進製標誌 cf,記錄運算時最高有效位產生的進製值。

② 符號標誌 sf,記錄運算結果的符號。結果為負時置1,否則置0。

③ 零標誌  zf,運算結果為0時zf位置1,否則置0。

④ 溢位標誌 of,在運算過程中,如運算元超出了機器可表示數的範圍稱為溢位。溢位時of位置1,否則置0。

⑤ 輔助進製標誌 af,記錄運算時第3位(半個位元組)產生的進製值。

⑥ 奇偶標誌 pf,用來為機器中傳送資訊時可能產生的**出錯情況提供檢驗條件。當結果運算元中1的個數為偶數時置1,否則置0。

段暫存器

cs **段  ip

ds 資料段  

ss 堆疊段  sp bp

es 附加段

二、七種定址方式:

1、立即定址方式:

運算元就包含在指令中。作為指令的一部分,跟在操作碼後存放在**段。

這種運算元成為立即數。立即數可以是8位的,也可以是16位的。

例如:指令: mov ax,1234h

則: ax = 1234h

2、暫存器定址方式:

運算元在cpu內部的暫存器中,指令指定暫存器號。

對於16位運算元,暫存器可以是:ax、bx、cx、dx、si、di、sp和bp等。

對於8位運算元,暫存器可以是al 、ah、bl、bh、cl、ch、dl、dh。

這種定址方式由於運算元就在暫存器中,不需要訪問儲存器來取得運算元

因而可以取得較高的運算數度。

3、直接定址方式:

運算元在暫存器中,指令直接包含有運算元的有效位址(偏移位址)

注:運算元一般存放在資料段

所以運算元的位址由ds加上指令中直接給出的16位偏移得到。如果採用

段超越字首,則運算元也可含在資料段外的其他段中。

例如:mov ax,[8054]

如(ds) = 2000h,

則執行結果為(ax) = 3050h

(實體地址=20000+8054=28054h)

28054h裡的內容為3050h

在組合語言指令中,可以用符號位址代替數值位址

如:mov ax,value

此時value為存放運算元單元的符號位址。

如寫成:mov ax,[value]也是可以的,兩者是等效的。

如value在附加段中,則應指定段超越字首如下:

mov ax,es:value 或 mov ax,es:[value]

4、暫存器間接定址方式:

運算元在暫存器中,運算元有效位址在si、di、bx、bp

這四個暫存器之一中。在一般情況下,如果有效位址在

si、di和bx中,則以ds段暫存器中的內容為段值。如果

有效位址在bp中,則以ss段暫存器中的內容為段值

例如:mov ax,[si]

如果(ds) = 5000h (si) = 1234h

則實體地址 =  50000 + 1234 = 51234h

51234h位址中的內容為:6789h

執行該指令後,(ax) = 6789h

5、暫存器相對定址方式:

運算元在儲存器中,運算元的有效位址是乙個基址暫存器(bx、bp)

或變址暫存器(si、di)的內容加上指令中給定的8位或16位位移量之和

bx  8位 位移量

ea(有效位址) =  bp  + 

si  16位 位移量

di在一般情況下,如果si、di、或bx中的內容作為有效位址的一部分,那麼

引用的段暫存器是ds;如果bp中的內容作為有效位址的一部分,那麼引用的

段暫存器是ss。

實體地址 = 16d × (ds) + (bx) + 8

或(si)或16位位移量

或(di)

實體地址 = 16d × (ss) + (bp) + 8位位移量

或16位位移量

在指令中給定的8位或16位位移量採用補碼形式表示。在計算有效位址時,如

位移量是8位,則被帶符號擴充套件成16位。

例如:mov ax,[di+1223h]

假設,(ds) = 5000h,(di) = 3678h

則實體地址 = 50000 + 3678 + 1233 = 5489bh

5489bh位址中的內容:55aah

執行該指令後ax = 55aah

下面指令中,源運算元採用暫存器相對定址,引用的段暫存器是ss: mov bx,[bp-4]

下面指令中,目的運算元採用暫存器相對定址,引用的段暫存器是es: mov es:[bx+5],al

指令:mov ax,[si+3]與mov ax,3[si]是等價的

6、基址加變址定址方式:

運算元在暫存器中,運算元的有效位址由:

基址暫存器之一的內容與變址暫存器之一的內容相加

bx   si

即: ea =    + 

bp   di

在一般情況下,如果bp之內容作為有效位址的一部分,則以ss之內容為段值,否則已ds

為段值。

例如:mov ax,[bx][di]

如:(ds)=2100h,

(bx)=0158h,

(di)=10a5h

則ea=0158 + 10a5 = 11fd

實體地址=21000 + 11fd = 221fdh

221fdh位址中的內容:1234h

執行該指令後ax = 1234h

下面指令中,目的運算元採用基址加變址定址,

引用的段暫存器是ds: mov ds:[bp+si],al

下面指令中,源運算元採用基址加變址定址,

引用的段暫存器es: mov ax,es:[bx+si]

這種定址方式使用與陣列或**處理。用基址暫存器存放陣列首位址,而用變地暫存器

來定位陣列中的各元素,或反之。由於兩個暫存器都可改變,所以能更加靈活地訪問數

組或**中的元素。

下面的兩種表示方法是等價的:

mov ax,[bx+di]

mov ax,[di][bx]

7、相對基址加變址定址方式:

運算元在儲存器中,運算元的有效位址由於基址暫存器之一的內容與變址暫存器之一的

內容及指令中給定的8位或16位位移量相加得到。

bx    si    8位

即: ea =     +     +      位移量

bp    di    16位

在一般情況下,如果bp中的內容作為有效位址的一部分,則以ss段暫存器中的內容為段

值,否則以ds段暫存器中的內容為段值。

在指令中給定的8位或16位位移量採用補碼形式表示。

在計算有效位址時,如果位移量是8位,那麼被帶符號擴充套件成16位。

當所得的有效位址操作ffffh時,就取其64k的模

例如:mov ax,[bx+di-2]

假設,(ds) = 5000h, (bx) = 1223h, di = 54h, (51275) = 54h, (51276) = 76h

實體地址= 50000 + 1223 + 0054 + fffe(-2 各位取反末位加一) = 51275h

執行該指令後 (ax) = 7654h

相對基址加變址這種定址方式的表示方法多種多樣,以下四種方法均是等價的:

mov ax,[bx+di+1234h], mov ax,1234h[bx][di]

mov ax 1234h[bx+di],  mov ax,1234h[di][bx]

七種定址方式 暫存器間接定址方式

運算元在儲存器中,運算元的有效位址用si di bx和bp等四個暫存器之一來指定,稱這種定址方式為暫存器間接定址方式。該定址方式實體地址的計算方法如下 暫存器間接定址方式讀取儲存單元的原理如圖所示。在不使用段超越字首的情況下,有下列規定 若有效位址用si di和bx等之一來指定,則其預設的段暫存器為...

暫存器的七種定址方式

立即定址方式 運算元作為指令的一部分而直接寫在指令中,這種運算元稱為立即數,這種定址方式也就稱為立即數定址方式。立即數可以是8位 16位或32位,該數值緊跟在操作碼之後。暫存器定址方式 指令所要的運算元已儲存在某暫存器中,或把目標運算元存入暫存器。把在指令中指出所使用暫存器 即 暫存器的助憶符 的定...

七種定址方式

共7種定址方式 1.立即定址方式 立即數包含在指令中,作為指令的一部分。如 mov ax 1234h 2.暫存器定址方式 運算元在cpu內部的暫存器中,指令指定暫存器號 16位運算元,暫存器可以是 ax,bx,cx,dx,si,di,sp和bp 8位運算元,暫存器可以是 al,ah,bl,bh,cl...