總共有14個16位寄存器,8個8位寄存器數組
通用寄存器:指針
數據寄存器:字符串
AH(8位) AL(8位) AX(16位) (AX和AL又稱累加器)it
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 基址指針 (存放堆棧基址偏移)margin
變址寄存器:主要用於存放某個存儲單元地址的偏移,或某組存儲單元開始地址的偏移,
即做爲存儲器(短)指針使用。做爲通用寄存器,它們能夠保存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 附加段
七種尋址方式:
一、當即尋址方式:
操做數就包含在指令中。做爲指令的一部分,跟在操做碼後存放在代碼段。
這種操做數成爲當即數。當即數能夠是8位的,也能夠是16位的。
例如:
指令: MOV AX,1234H
則: AX = 1234H
二、寄存器尋址方式:
操做數在CPU內部的寄存器中,指令指定寄存器號。
對於16位操做數,寄存器能夠是:AX、BX、CX、DX、SI、DI、SP和BP等。
對於8位操做數,寄存器能夠是AL 、AH、BL、BH、CL、CH、DL、DH。
這種尋址方式因爲操做數就在寄存器中,不須要訪問存儲器來取得操做數
於是能夠取得較高的運算數度。
三、直接尋址方式:
操做數在寄存器中,指令直接包含有操做數的有效地址(偏移地址)
注:操做數通常存放在數據段
因此操做數的地址由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]
四、寄存器間接尋址方式:
操做數在寄存器中,操做數有效地址在SI、DI、BX、BP
這四個寄存器之一中。在通常狀況下,若是有效地址在
SI、DI和BX中,則以DS段寄存器中的內容爲段值。若是
有效地址在BP中,則以SS段寄存器中的內容爲段值
例如:
MOV AX,[SI]
若是(DS) = 5000H (SI) = 1234H
則物理地址 = 50000 + 1234 = 51234H
51234H地址中的內容爲:6789H
執行該指令後,(AX) = 6789H
五、寄存器相對尋址方式:
操做數在存儲器中,操做數的有效地址是一個基址寄存器(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]是等價的
六、基址加變址尋址方式:
操做數在寄存器中,操做數的有效地址由:
基址寄存器之一的內容與變址寄存器之一的內容相加
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]
七、相對基址加變址尋址方式:
操做數在存儲器中,操做數的有效地址因爲基址寄存器之一的內容與變址寄存器之一的
內容及指令中給定的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]