一、暫存器
總共有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...