彙編語言(一)

1 8086寄存器組

8086寄存器都是16位的寄存器,根據用途可分爲4種類型。分別是數據寄存器、地址寄存器、段寄存器和控制寄存器。如圖所示img

數據寄存器中每個寄存器又可以分爲2個8位的寄存器。分別爲AH、AL,BH、BL,CH、CL,DH、DL。H表示高字節(高8位)寄存器、L表示低字節(低8位)寄存器。例如 用AX寄存器存放一個字1234H,表示爲(AX)=1234H,即高字節12放在AH,低字節34放在AL中。

地址寄存器包括指針和變址寄存器SP、BP、SI、DI四個16位寄存器。顧名思義,它們可用來存放存儲器操作數的偏移地址。另外,它們也可以作爲通用寄存器用。

8086CPU有4個16位的段寄存器,分別是CS代碼段寄存器、DS數據段寄存器、ES附加段寄存器、SS堆棧段寄存器。

控制寄存器包括IP和FLAGS(又稱爲PSW程序狀態字)兩個16位寄存器。用於控制程序的執行。IP 指令指針寄存器,用來存放代碼段中的偏移地址,指出當前正在執行指令的下一條指令所在單元的偏移地址。 FLAGS標誌寄存器中的某位代表CPU的1個標誌,表示出CPU的某種執行狀態。最低位爲D0,最高位爲D15。8086CPU的標誌寄存器共有9個標誌,分別爲6個條件碼標誌和3個控制標誌。

如圖: img 

(1)條件碼標誌

CF進位標誌。當指令執行結果的最高位向前有進位時,CF=1,否則CF=0。
SF符號標誌。當指令執行結果的最高位(符號位)爲負時,SF=1,否則SF=0。
ZF零標誌。當指令執行結果爲0時,ZF=1,結果不爲0時,ZF=0。
OF溢出標誌。當指令執行結果有溢出(超出了數的表示範圍)時,OF=1,否則OF=0。
AF輔助進位標誌。當指令執行結果的第3位(半字節)向前有進位時,AF=1,否則AF=0。
PF奇偶標誌。當指令執行結果中1的個數爲偶數個時,PF=1,否則PF=0。

(2)控制標誌

DF方向標誌。執行串處理指令時,若設置DF=0,存儲單元的地址寄存器的值自動增加,若設置DF=1,存儲單元的地址寄存器的值自動減小。
IF中斷標誌。設置IF=1,允許CPU響應可屏蔽中斷,IF=0則不響應。
TF陷阱標誌。在DEBUG調試時,TF=1,採用單步執行方式,即進入陷阱;TF=0,正常執行程序。

例: 兩個二進制數相加運算,有關標誌位自動發生變化。

img

根據計算結果可知CPU會自動地把標誌位設爲:CF=0,SF=1,ZF=0,OF=0,PF=0,即無進位,結果爲負數,結果不爲0,沒有溢出,奇數個1。 對溢出的判斷也可以從簡單的角度理解,因爲進行運算的二進制數是補碼,可看出本題是一個負數和一個正數相加,結果爲負數,不溢出。若兩個正數相加,結果爲負數,或者兩個負數相加,結果爲正數,那都是溢出了,說明8位補碼已經表示不了該結果。

在DEBUG調試環境下以字母縮寫的形式表示各個標誌位的狀態。進入DEBUG後,用R命令查看寄存器狀態時,可以看到除了陷阱標誌以外的標誌位的狀態。如表2-1所示。 此處輸入圖片的描述
發佈了106 篇原創文章 · 獲贊 8 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章