程式狀態暫存器
CPSR(當前程式
狀態暫存器)在任何處理器模式下被訪問。它包含了條件標誌位、中斷禁止位、當前處理器模式標誌以及其他的一些控制和狀態位。每一種處理器模式下都有一個專用的物理狀態暫存器,稱為
SPSR(備份程式狀態暫存器)。當特定的異常中斷髮生時,這個
暫存器用於存放當前程式狀態暫存器的內容。在異常中斷退出時,可以用SPSR來恢復CPSR。由於用戶模式和系統模式不是異常中斷模式,所以他沒有SPSR。當用戶在用戶模式或系統模式訪問SPSR,將產生不可預知的後果。
CPSR格式
CPSR格式如下所示。
SPSR和CPSR格式相同。
31 30 29 28 27 26 7 6 5 4 3 2 1 0
N Z C V Q DNM(RAZ) I F T M4 M3 M2 M1 M0
***條件標誌位***
N——本位設定成當前指令運算結果的bit[31]的值。當兩個表示的有符號整數運算時,n=1表示運算結果為負數,n=0表示結果為正數或零。
z——z=1表示運算的結果為零;z=0表示運算的結果不為零。對於
CMP指令,Z=1表示進行比較的兩個數大小相等。
C——下面分四種情況討論C的設定方法:
在加法指令中(包括比較指令CMN),當結果產生了進位,則C=1,表示無符號運算發生溢出(
overflow);其他情況C=0。
在減法指令中(包括比較指令CMP),當運算中發生
借位,則C=0,表示無符號運算數發生進位;其他情況下C=1。
對於包含移位操作的非加減運算指令,C中包含最後一次溢出的位的數值
對於其他非加減運算指令,C位的值通常不受影響
V——對於加減運算指令,當
運算元和運算結果為二進制的
補碼表示的帶符號數時,V=1表示符號位溢出;通常其他指令不影響V位。
***Q標識位***
在ARM V5的E系列處理器中,CPSR的bit[27]稱為q標識位,主要用於指示增強的dsp指令是否發生了溢出。同樣的
spsr的bit[27]位也稱為q標識位,用於在異常中
斷髮生時保存和恢復CPSR中的Q標識位。
在ARM V5以前的版本及ARM V5的非E系列的處理器中,Q標識位沒有被定義。
***CPSR中的控制位***
CPSR的低八位I、F、T、M[4:0]統稱為控制位。當異常中斷髮生時這些位發生變化。在
特權級的處理器模式下,軟體可以修改這些控制位。
**中斷禁止位:當I=1時禁止
IRQ中斷,當F=1時禁止FIQ中斷
**T控制位:T控制位用於控制指令執行的狀態,即說明本指令是ARM指令還是
Thumb指令。對於ARM V4以更高版本的T系列
ARM處理器,T控制位含義如下:
T=0表示執行ARM指令
T=1表示執行Thumb指令
對於ARM V5以及更高版本的非T系列處理器,T控制位的含義如下
T=0表示執行ARM指令
T=1表示強制下一條執行的指令產生未定指令中斷
***M控制位***
M控制位控制處理器模式,具體含義如下:
ob10000 user pc,r14~r0,CPSR
0b10001 FIQ PC,R14_FIQ-R8_FIQ,R7~R0,CPSR,SPSR_FIQ
0b10010 IRQ PC,R14_IRQ-R13_IRQ,R12~R0,CPSR,SPSR_IRQ
0B10011 SUPERVISOR PC,R14_SVC-R13_SVC,R12~R0,CPSR,SPSR_SVC
0b10111 ABORT PC,R14_ABT-R13_ABT,R12~R0,CPSR,SPSR_ABT
0b11011 UNDEFINEED PC,R14_UND-R8_UND,R12~R0,CPSR,SPSR_UND
0b11111 SYSTEM PC,R14-R0,CPSR(ARM V4以及更高版本)
***CPSR中的其他位***
這些位用於將來擴展。套用軟體不要操作這些位。
CPSP也叫恆功率調速比,是英文constant power speed ratio的縮寫。常出現於
永磁電機控制方法中。