首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 組合語言

Intel 8086/8088 旗標暫存器深度解析:狀態與控制旗標全攻略

     編輯:組合語言

在 x86 架構的基石中,Intel 8086/8088 處理器擁有一個 16 位元的旗標暫存器,它是反映微處理器當前狀態與控制行為的核心中樞。這個暫存器內含 9 個旗標位,劃分為兩大陣營:狀態旗標與控制旗標。狀態旗標由 CPU 依據運算結果自動設定,記錄算術邏輯單元(EU)執行運算後的特徵,常用於影響後續指令(如條件跳轉)的執行流程;控制旗標則由系統或使用者程式透過指令主動設定或清除,用以掌控 CPU 的特定操作模式。

一、 狀態旗標:運算結果的「體檢報告」

1. 進位旗標 - Carry Flag (CF)

CF 旗標專司偵測運算結果最高位是否產生進位(加法)或借位(減法)。若字操作的第 15 位或位元組操作的第 7 位產生進位/借位,CF 置 1,否則清 0。此外,在循環移位與移位指令中,CF 還擔任暫存從最高位或最低位移出之 0 或 1 的角色。

2. 奇偶旗標 - Parity Flag (PF)

PF 旗標反映運算結果低 8 位中「1」的個數奇偶性。若「1」的個數為偶數,PF 置 1,否則置 0。這為資料傳輸過程中可能發生的錯誤提供了基礎的校驗機制。

3. 輔助進位旗標 - Auxiliary Carry Flag (AF)

AF 旗標專注於運算結果低 4 位(第 3 位向第 4 位)是否產生進位或借位。若發生則置 1,否則置 0。AF 僅反映低 8 位狀態,與操作數長度無關,主要用於十進制運算調整(如 DAA、DAS 指令)中的 BCD 碼修正。

4. 零值旗標 - Zero Flag (ZF)

邏輯最直觀的旗標:若運算結果為 0,ZF 置 1;否則置 0。它是判斷兩值相等(減法結果為 0)或結果為空的關鍵依據。

5. 符號旗標 - Sign Flag (SF)

將運算結果視為帶符號數(補碼表示)時,SF 旗標與結果的最高位(符號位)保持一致。結果為負數(最高位為 1)時 SF=1,正數則為 0。它是判斷運算結果正負的直接指標。

6. 溢出旗標 - Overflow Flag (OF)

OF 旗標用於檢測帶符號數運算是否超出補碼表示範圍。8 位帶符號數範圍為 -128 至 +127,16 位為 -32768 至 +32767。若兩正數相加得負數,或兩負數相加得正數,即發生溢出,OF 置 1。這對於帶符號數運算的正確性至關重要。

二、 控制旗標:CPU 行為的「總開關」

1. 單步旗標 - Trap Flag (TF)

又稱追蹤旗標。當 TF=1 時,CPU 進入單步執行模式,每執行完一條指令即產生一個單步中斷(INT 1)。這是除錯器實現「單步執行」與「逐行除錯」功能的核心機制。

2. 中斷允許旗標 - Interrupt Flag (IF)

IF 控制 CPU 是否響應外部可屏蔽中斷請求(INTR 引腳)。IF=1 時開放中斷響應(STI 指令設定);IF=0 時屏蔽可屏蔽中斷(CLI 指令清除)。不可屏蔽中斷(NMI)不受 IF 影響。

3. 方向旗標 - Direction Flag (DF)

DF 決定串操作指令(如 MOVS、CMPS、SCAS、LODS、STOS)執行時,源/目的索引暫存器(SI/DI)的調整方向。DF=0 時正向處理(地址遞增,由低向高);DF=1 時反向處理(地址遞減,由高向低)。對應指令 CLD(清零)與 STD(置 1)。


本文整理自技術文獻,旨在提供清晰的架構參考。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved