七定址模式暫存器

2021-09-06 23:47:02 字數 4305 閱讀 7199

一、暫存器

總共同擁有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]

暫存器定址方式

指令所要的運算元已儲存在某暫存器中,或把目標運算元存入暫存器。把在指令中指出所使用暫存器 即 暫存器的助憶符 的定址方式稱為暫存器定址方式。指令中可以引用的暫存器及其符號名稱如下 8位暫存器有 ah al bh bl ch cl dh和dl等 16位暫存器有 ax bx cx dx si di sp...

暫存器定址方式

微機系統有七種基本的定址方式 立即定址方式 暫存器定址方式 直接定址方式 暫存器間接定址方式 暫存器相對定址方式 基址加變址定址方式 相對基址加變址定址方式等。其中,後五種定址方式是確定記憶體單元有效位址的五種不同的計算方法,用它們可方便地實現對陣列元素的訪問。立即數定址方式 mov ah,80h ...

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

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