ARM程序狀態寄存器Program State Register
在ARM模式中, 有16個數據寄存器和1或2個狀態寄存器是可以隨時訪問的.在特權模式 (privileged mode) 下, 對應的特殊組寄存器才可以使用.
CPSR
當前程序狀態寄存器 (Current Program State Register)
SPSR
保存的程序狀態寄存器 (Saved Program State Register), 有6個,主要是在處理異常的時候使用.
每一種處理器模式下都有一個專用的物理寄存器作為備份的程序狀態寄存器SPSR , 當特定的異常發生時,這個物理寄存器負責保存CPSR當前程序狀態寄存器的內容, 當異常處理程序返回時,再將內容恢復到當前程序狀態器中,繼續向下執行原來程序.
結構解析
CPSR和保存它的SPSR寄存器因為都屬於狀態寄存器PSR,因此它們的結構相同,如下:
- 保存最近的邏輯或者算術操作的信息;
- 控制中斷時使能;
- 設置處理器的工作模式;
狀態寄存器的各個位的功能如下圖:
其中,着重要注意的是高4位(28-31)和低8位(0-7).
注意:
- DNM(Do Not Modify):不同通過軟件進行賦值;
- 條件標志位(Condition code flags): N,Z,C,V. 這些位可以通過邏輯或者算術操作, 或者 MSR
和 LDM
指令來操作. 處理器會測試這些標志位,以確定是否操作一些指令.
- 控制位(低8位 I,F,T,M[4:0]),當發生異常時, 這些為的值將發生相應的變化.在特權模式下,也可以通過軟件來修改這些位.用的比較多.