跳转到内容

狀態暫存器

本页使用了标题或全文手工转换
维基百科,自由的百科全书

狀態暫存器(status register)或旗標暫存器(flag register)是中央处理器中集合許多狀態旗標位元的暫存器。這類的暫存器像是X86架構的FLAGS暫存器英语FLAGS register (computing)IBM System/360架構英语IBM System/360 architecture透過z/Architecture英语z/Architecture程序状态字(PSW),以及ARM Cortex-A英语ARM Cortex-A架構裡的應用程式狀態暫存器(application program status register, APSR)[1]

狀態暫存器是包括中央处理器狀態資訊的硬體暫存器。其個別位元可以直接用机器语言指令讀寫,或是用其他方式讀取或修改其值。狀態暫存器讓一個指令可以依照上一個指令動作後的結果進行動作。

一般來說,有些狀態暫存器的位元會隨運算或是位元處理的結果而變化。例如,若輸出結果為0,會設定Z旗標,若輸出結果不為0,會清除Z旗標。其他指令也可能變更旗標的結果。一些條件判斷指令也會讀取位元狀態,以決定是否要執行後續動作(跳躍、呼叫副程式、副程式返回等)。

有些CPU架構(像是MIPS架構DEC Alpha)沒有專用的狀態暫存器。有些架構不會隱式的讀寫旗標,有些則是用顯式指定的通用暫存器完成此工作。

狀態暫存器也會有其他的欄位,例如專用旗標、中斷始能旗標等。呼叫中斷時,會將目前執行緒的狀態暫存器、程式計數器和其他暂存器存到呼叫堆疊中,以記錄中斷前的狀態,中斷結束後再回到該位置繼續執行。

常用旗標

[编辑]

以下是最常見的CPU狀態旗標。

旗標 名稱 說明
Z 零旗標 表示算術或邏輯運算的結果(也可能是載入值)是零
C 進位旗標 表示數值相加後有進位,若較低的位元組有進位,後續處理加法時,需在目前位元組的最低有效位加1。在許多的處理器也會用此旗標來輔助位移動或位旋轉。
S / N 符號旗標
負旗標
說明運算的結果為負
V / O / W 溢位旗標 表示運算的有號結果太大,超過二補數表示可以儲存的寬度。

其他旗標

[编辑]

以下是一些處理器要有的旗標:

旗標 名稱 說明
H / A / DC 半進位旗標英语Half-carry flag
輔助旗標
數位進位旗標
十進制輔助旗標
表示在最後一次計算時,半字節(一般是4個位元)之間有進位。可用在在用二進制硬體處理BCD運算時
P 同位元旗標英语Parity flag 表示最後運算完的數值是否是奇數
I 中斷旗標英语Interrupt flag 在一些處理器中,此位元是表示中斷有效或中斷已遮斷[2]。若處理器有多重中斷優先權等級(例如PDP-11)會用數個位元表示目前執行緒的中斷優先權。只有優先權更高的硬體才能中斷此執行緒。在其他架構下,此位元可能表示中斷目前有效,目前的執行緒是中斷處理程序英语interrupt handler的一部份。
S 監控旗標 在提供兩個或多個分级保护域的處理器中,狀態暫存器的一個或多個位元會表示目前執行緒的保護域等級,若此處理器只有兩個域,一個位元即可區分監管模式和使用者模式。

相關條目

[编辑]

參考資料

[编辑]