ARM CPSR+SPSR

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的值:
  •  在加法指令中(包括比較指令CMP),當結果產生了進位,則C=1,表示無符號運算髮生上溢出;其他情況C=0。
  • 在減法指令中(包括減法指令CMP),當運算中發生借位,則C=0,表示無符號運算數發生下溢出;其他情況下C=1。 
  • 對於包含移位操作的非加鹼運算指令,C中包含最後一次溢出的的位的數值
  • 對於其他非加減運算指令,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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章