詳解ARM處理寄存器與用戶模式
程序狀態寄存器
寄存器R16用作程序狀態寄存器CPSR(Current Program Status Register,當前程序狀態寄存器)。在所有處理器模式下都可以訪問CPSR。CPSR包含條件碼標志、中斷禁止位、當前處理器模式以及其他狀態和控制信息。每種異常模式都有一個程序狀態保存寄存器SPSR(Saved Program Status Register)。當異常出現SPSR用于保留CPSR的狀態。
CPSR和SPSR的格式如下:
(1)條件碼標志
N、Z、C、V(Negative、Zero、Carry、oVerflow)均為條件碼標志位(Condition Code Flags),它們的內容可被算術或邏輯運算的結果所改變,并且可以決定某條指令是否被執行。CPSR中的條件碼標志可由大多數指令檢測以決定指令是否執行。在ARM狀態下,絕大多數的指令都是有條件執行的。在Thumb狀態下,僅有分支指令是有條件執行的。通常條件碼標志通過執行比較指令(CMN、CMP、TEQ、TST)、一些算術運算、邏輯運算和傳送指令進行修改。
條件碼標志的通常含義如下:
N:如果結果是帶符號二進制補碼,那么,若結果為負數,則N=1;若結果為正數或0,則N=0。
Z:若指令的結果為0,則置1(通常表示比較的結果為“相等”),否則置0。
C:可用如下4種方法之一設置:
一-加法(包括比較指令CMN)。若加法產生進位(即無符號溢出),則C置1;否則置0。
一-減法(包括比較指令CMP)。若減法產生借位(即無符號溢出),則C置0;否則置1。
一-對于結合移位操作的非加法/減法指令,C置為移出值的最后1位。
一-對于其他非加法/減法指令,C通常不改變。
V:可用如下兩種方法設置,即
一-對于加法或減法指令,當發生帶符號溢出時,V置1,認為操作數和結果是補碼形式的帶符號整數。
一-對于非加法/減法指令,V通常不改變。
(3)控制位
程序狀態寄存器PSR(Program Status Register)的最低8位I、F、T和M[4:0]用作控制位。當異常出現時改變控制位。處理器在特權模式下時也可由軟件改變。
a.中斷禁止位
I:置1,則禁止IRQ中斷;
F:置1,則禁止FIQ中斷。
b.T位
T=0 指示ARM執行;
T=1 指示Thumb執行。
c.模式控制位
M4、M3、M2、Ml和M0(M[4:0])是模式位,決定處理器的工作模式,如表所列。
M[4:0]工作模式可訪問的寄存器
10000用戶模式PC,CPSR,R14~R0
10001FIQ模式PC,R7~R0,CPSR, SPSR_fiq,R14_fiq~R8_fiq
10010IRQ模式PC,R12~R0,CPSR, SPSR_irq,R14_irq,R13_irq
10011管理模式PC,R12~R0, CPSR, SPSR_svc,R14_svc,R13_svc
10111中止模式PC,R12~R0, CPSR, SPSR_abt,R14_abt,R13_abt
11011未定義模式PC,R12~R0, CPSR, SPSR_und,R14_und,R13_und
11111系統模式PC,R14~R0,CPSR(ARM v4及以上版本)
并非所有的模式位組合都能定義一種有效的處理器模式。其他組合的結果不可預知。
(4)其他位
程序狀態寄存器的其他位保留,用做以后的擴展。
評論