1. 簡介
CPSR(當前程序狀態寄存器)在任何處理器模式下被訪問。它包含了【條件標誌位】、【中斷禁止位】、【當前處理器模式標誌】以及其他的一些控制和狀態位。每一種處理器模式下都有一個專用的物理狀態寄存器,稱爲SPSR (備份程序狀態寄存器)。
當特定的異常中斷髮生時,這個寄存器用於存放當前程序狀態寄存器的內容。在異常中斷退出時,可以用SPSR來恢復CPSR。由於用戶模式和系統模式不是異常中斷模式,所以他沒有SPSR。當用戶在用戶模式或系統模式訪問SPSR,將產生不可預知的後果。
2. CPSR格式
CPSR格式如下所示。SPSR和CPSR格式相同。 CPSR格式如下圖所示:
3. 條件碼標誌
N、Z、C、V均爲條件碼標誌位。它們的內容可被算術或邏輯運算的結果所改變,並且可以決定某條指令是否被執行。條件碼標誌各位的具體含義如下表所示:
標誌位 | 含義 |
N |
當兩個有符號整數運算時:
N=1:表示運算的結果爲負數;
N=0:表示運算的結果爲正數或零。
|
Z | Z=1表示運算的結果爲零,Z=0表示運算的結果非零。 對於CMP指令,Z=1表進行比較的兩個數相等 |
C |
可以有4種方法設置C的值:
|
V | 對於加減運算指令,當操作數和運算結果爲二進制的補碼錶示的帶符號數時,V=1表示符號爲溢出;通常其他指令不影響V位。 |
4. 控制位
CPSR的低八位I、F、T、M[4:0]統稱爲控制位。當異常中斷髮生時這些位發生變化。在特權級的處理器模式下,軟件可以修改這些控制位。
1) I: IRQ中斷禁止位:當I=1時禁止IRQ中斷,
2) F: FIQ中斷禁止位:當F=1時禁止FIQ中斷
3) T: T控制位該位反映處理器的運行狀態。當該位爲1時,程序運行於THUMB狀態,否則運行於ARM狀態。該信號反映在外部引腳TBIT上。在程序中不得修改CPSR中的TBIT位,否則處理器工作狀態不能確定。
4) 保留位:CPSR中的其餘位爲保留位,當改變CPSR中的條件碼標誌位或者控制位時,保留位不要改變,在程序中也不要用保留位存儲數據。保留位將用於ARM版本的擴展。
5) 運行模式位M[4:0]:這幾位是模式位,這些位決定了處理器的運行模式。具體含義如下表所示:
M[4:0] | 處理器模式 | ARM模式可訪問的寄存器 | THUMB模式可訪問的寄存器 |
0b10000 | 用戶模式 | PC,CPSR,R0~R14 | PC,CPSR,R0~R7,LR,SP |
0b10001 | FIQ模式 | PC,CPSR,SPSR_fiq,R14_fiq~R8_fiq,R0~R7 | PC,CPSR,SPSR_fiq,LR_fiq,SP_fiq,R0~R7 |
0b10010 | IRQ模式 | PC,CPSR,SPSR_irq,R14_irq~R13_irq,R0~R12 | PC,CPSR,SPSR_irq,LR_irq,SP_irq,R0~R7 |
0b10011 | 管理模式 | PC,CPSR,SPSR_svc,R14_svc~R13_svc,R0~R12 | PC,CPSR,SPSR_svc,LR_svc,SP_svc,R0~R7 |
0b10111 | 中止模式 | PC,CPSR,SPSR_abt,R14_abt~R13_abt,R0~R12 | PC,CPSR,SPSR_abt,LR_abt,SP_abt,R0~R7 |
0b11011 | 未定義模式 | PC,CPSR,SPSR_und,R14_und~R13_und,R0~R12 | PC,CPSR,SPSR_und,LR_und,SP_und,R0~R |
0b11111 | 系統模式 | PC,CPSR,R0~R14 | PC,CPSR,LR,SP,R0~R74 |