CPSR的格式如下圖。SPSR格式與CPSR格式相同。
1、條件标志位
N(Negative)、Z(Zero)、C(Carry)及V(oVerflow)統稱為條件标志位。大部分的ARM指令可以根據CPSR中的這些條件标志位選擇性地執行。各條件标志位的具體含義如下。
N:當兩個補碼表示的有符号整數運算時,N=1表示運算的結果為負數;N=0表示結果為整數或零。
Z:Z=1表示運算結果為零;Z=0表示運算結果不為零。對于CMP指令,Z=1表示進行比較的兩個數大小相等。
C:下面介紹4種情況C的設定方法。
--在加法指令中(包括比較指令CMN),當結果産生了進位,則C=1,表示無符号數運算發生上溢出;其他情況下C=0。
--在劍法指令中(包括比較指令CMP),當運算中發生借位,則C=0,表示無符号數運算發生下溢出;其他情況下C=1。
--對于包含移位操作的非加/減發運算指令,C中包含最後一次被溢出的位的數值。
--對于其他非加/減法運算指令,C位的值通常不變。
V:對于加/減法運算指令,當操作數和運算結果為二進制的補碼表示的帶符号數時,V=1表示符号位溢出。通常其他的指令不影響V位,具體可參考各指令的說明。
2、CPSR中的控制位
CPSR的低8位I、F、T及M[4:0]統稱為控制位。當異常發生時,這些位發生變化,在特權級的處理器模式下,軟體可以修改這些控制位。
1)中斷禁止位
-- I=1時,禁止IRQ中斷。
-- F=1時,禁止FIQ中斷。
2)T控制位
T控制位用于控制指令執行的狀态,級說明本指令時ARM指令,還是Thumb指令。但對于不同版本的ARM處理器,T控制位的含義不同。
對于ARMv3和ATMv4的非T系列版本的處理器,沒有ARM狀态和Thumb狀态切換,固T=0。
對于ARMv4以及更高的版本的T系列處理器,T含義如下:
-T=0表示執行ARM指令。
-T=1表示執行Thumb指令。
對于ARMv5以及更高的、版本的非T系列的ARM處理器,T含義如下:
-T=0表示執行ARM指令。
-T=1表示強制下一條執行的指令産生未定義指令中斷。
3)M控制位,可參考上圖所示。
3、CPSR中的其他位
CPSR中的其他位用于将來ARM版本的擴充。應用軟體不要操作這些位,以免與ARM将來版本的擴充沖突。