狀態暫存器
外观

狀態暫存器(status register)或旗標暫存器(flag register)是中央处理器中集合許多狀態旗標位元的暫存器。這類的暫存器像是X86架構的FLAGS暫存器、IBM System/360架構透過z/Architecture的程序状态字(PSW),以及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 | 半進位旗標 輔助旗標 數位進位旗標 十進制輔助旗標 |
表示在最後一次計算時,半字節(一般是4個位元)之間有進位。可用在在用二進制硬體處理BCD運算時 |
P | 同位元旗標 | 表示最後運算完的數值是否是奇數 |
I | 中斷旗標 | 在一些處理器中,此位元是表示中斷有效或中斷已遮斷[2]。若處理器有多重中斷優先權等級(例如PDP-11)會用數個位元表示目前執行緒的中斷優先權。只有優先權更高的硬體才能中斷此執行緒。在其他架構下,此位元可能表示中斷目前有效,目前的執行緒是中斷處理程序的一部份。 |
S | 監控旗標 | 在提供兩個或多個分级保护域的處理器中,狀態暫存器的一個或多個位元會表示目前執行緒的保護域等級,若此處理器只有兩個域,一個位元即可區分監管模式和使用者模式。 |
相關條目
[编辑]參考資料
[编辑]- ^ ARM Information Center. infocenter.arm.com. [2019-05-18].
- ^ Atmel 8-Bit Microcontroller With 4/8/16/32KBytes In-system Programmable Flash - Datasheet (PDF). Microchip Technology.