2種運行狀態:
ARM狀態(32位)、Thumb狀態(16位),兩種狀態之間可任意切換;
7種運行模式:
用戶模式usr
快速中斷fiq
外部中斷irq
管理svc
系統sys
數據訪問中止abt
未定義指令中止und
寄存器組織:
ARM狀態:
R0~R14 通用寄存器
R0~R7 未分組寄存器,所有7種運行模式下指向同一物理寄存器,在中斷或異常處理等模式轉換時,需防止寄存器中數據的破壞。
R8~R14 分組 根據不同的運行模式訪問不同的物理寄存器
R8~R12 除fiq外,其餘同usr模式
R13~R14 除usr、sys外,其餘有各自分組模式
R15 PC 程序計數器
R16 狀態寄存器
CPSR通用
SPSR 除usr、sys外,用於異常保護的CPSR的備份,異常時,保存CPSR值,異常退出時,將該值恢復到CPSR
Thumb狀態:
R0~R7 通用
SP對應ARM狀態R13
LR對應ARM狀態R14
PC對應ARM狀態R15
CPSR和SPSR與ARM狀態同
R13 -SP stack pointer 堆棧指針,用於取指令操作
R14 -LR Load register 用於程序調用
PC -程序計數器,總是指向當前指令的下兩條指令,即PC值爲當前指令地址值加8個字節
程序狀態寄存器:
CPSR 每一中模式下訪問同一物理寄存器
SPSR 除usr、sys外,用於異常保護的CPSR的備份,異常時,保存CPSR值,異常退出時,將該值恢復到CPSR,每一中異常運行模式(除usr和sys)有各自的物理寄存器。其功能:保存ALU中的當前操作信息;控制允許和禁止中斷;設置處理器的運行模式
統計上述,ARM處理器共有:
8個未分組(R0~R7)寄存器共享物理寄存器
2×5個分組物理寄存器:fiq模式分別獨享一個fiq物理寄存器(對應R8_fiq~R14_fiq),其餘模式分別共享一個通用物理寄存器
6個堆棧指針物理寄存器,R13×6
6個LR物理寄存器 R14×6
1個程序計數物理寄存器
6個狀態物理寄存器:一個CPSR,5個SPSR
8+10+6+6+1+6 = 37個物理寄存器
Thumb狀態:
出去R8~R14未分組部分
SP 對應 ARM狀態R13
LR 對應 ARM狀態R14
PC 對應 ARM狀態R15
CPSR對應ARM狀態CPSR
SPSR 對應ARM狀態SPSR
程序狀態寄存器位標識:
條件標識位 保留 控制位
31 30 29 28 27 26 25 24 … 8 7 6 5 4 3 2 1 0
N Z C V . . . … I F T M4 M3 M2 M1 M0
說明:
條件標識位[31 : 28]:它們的內容可被算術或邏輯運算的結果所改變,並且可以決定某條指令是否被執行。在ARM狀態下,絕大多數指令都是有條件的執行的,在Thumb狀態下,只有分支指令被有條件的執行
N:當用兩個補碼錶示的帶符號數進行運算時,N=1 表示運算的結果爲負數;N=0 表示運算的結果爲正數或零;
Z:Z=1 表示運算的結果爲零;Z=0表示運算的結果爲非零;
C:可以有4種方法設置C的值:
─ 加法運算(包括比較指令CMN):當運算產生了進位時(無符號數溢出),C=1,否則C=0。─ 減法運算(包括比較指令CMP):當運算時產生了借位(無符號數溢出),C=0,否則C=1。
─ 對於包含移位操作的非加/減運算指令,C爲移出值的最後一位。
─ 對於其他的非加/減運算指令,C的值通常不改變。
V:可以有2種方法設置V的值:
─ 對於加/減法運算指令,當操作數和運算結果爲二進制的補碼錶示的帶符號數時,V=1表示符號位溢出。
─ 對於其他的非加/減運算指令,C的值通常不改變。
保留位[27 : 8]:當改變PSR中的條件碼標誌位或者控制位時,保留位不要被改變,在程序中也不要使用保留位來存儲數據。保留位將用於ARM版本的擴展。
控制位[7 : 0]:PSR的低8位(包括I、F、T和M[4:0])稱爲控制位,當發生異常時這些位可以被改變。如果處理器運行特權模式,這些位也可以由程序修改。
I:I =1 表示禁止外部(硬件)中斷(IRQ)
F:F=1 表示快速中斷(FIQ)
T:反映處理器的運行狀態。
對於ARM體系結構v5及以上的版本的T系列處理器,當該位爲1時,程序運行於Thumb狀態,否則運行於ARM狀態。對於ARM體系結構v5及以上的版本的非T系列處理器,當該位爲1時,執行下一條指令以引起爲定義的指令異常;當該位爲0時,表示運行於ARM狀態。
運行模式位M[4 : 0]:M0、M1、M2、M3、M4是模式位。這些位決定了處理器的運行模式。具體含義如表2-2所示:
表2-2 運行模式位M[4:0]的具體含義
M[4:0] 處理器模式 可訪問的寄存器
0b10000 用戶模式 PC,CPSR,R0-R14
0b10001 FIQ模式 PC,CPSR, SPSR_fiq,R14_fiq-R8_fiq, R7~R0
0b10010 IRQ模式 PC,CPSR, SPSR_irq,R14_irq,R13_irq,R12~R0
0b10011 管理模式 PC,CPSR, SPSR_svc,R14_svc,R13_svc,,R12~R0,
0b10111 中止模式 PC,CPSR, SPSR_abt,R14_abt,R13_abt, R12~R0,
0b11011 未定義模式 PC,CPSR, SPSR_und,R14_und,R13_und, R12~R0,
0b11111 系統模式 PC,CPSR(ARM v4及以上版本), R14~R0
由表2-2可知,並不是所有的運行模式位的組合都是有效地,其他的組合結果會導致處理器進入一個不可恢復的狀態
arm-cpsr
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.