1. 前言
2. 指令運行與異常處理寄存器
ARM體系結構的寄存器分為兩類:
(1)系統控制和狀態報告寄存器
(2)指令處理寄存器,如累加、異常處理
本部分將主要介紹如上第(2)部分的寄存器,分為AARCH64 state和AARCH32 state
2.1 AARCH64下指令運行與異常處理寄存器
| 寄存器類型 |
Bit |
描述 |
| X0-X30 |
64bit |
通用寄存器,如果有需要可以當做32bit使用:W0-W30 |
| V0-V31 |
128bit |
32個浮點寄存器,用於標量的浮點操作和向量或標量的SIMD操作 |
| XZR |
64bit |
Zero寄存器,寫入此寄存器的數據被忽略,讀出的數據全為0 |
| WZR |
32bit |
Zero寄存器的32bit形式 |
| LR (X30) |
64bit |
通常稱X30為程序鏈接寄存器,保存跳轉返回信息地址 |
| ELR_ELx |
64bit |
異常鏈接寄存器,保存異常進入ELx的異常地址(x={1,2,3}) |
| SP_ELx |
64bit |
每個異常級別都有一個專用的SP寄存器,若PSTATE.M[0] ==1,則每個ELx選擇SP_ELx(x={0,1,2,3}),否則選擇同一個SP_EL0 |
| PC |
64bit |
程序計數器,俗稱PC指針,總是指向即將要執行的下一條指令 |
| SPSR_ELx |
32bit |
保存進入ELx的PSTATE狀態信息(x={1,2,3}) NZCV [31:28]: 允許訪問的符號標志位,顯示了PSTATE.{N, Z, C, V}; [27:22]:AArch64異常時reserved; SS [21]:software step IL[20]: 非法異常狀態位,顯示了在異常發生的時候PSTATE.IL的值; [19:10]:AArch64異常時reserved DAIF[9:6]: 中斷使能位:D-Debug,I-IRQ,A-SError,F-FIQ ,邏輯0允許; Bit[5]: AArch64異常時reserved M[4]:指示異常捕獲時的處理器狀態; M[3:2]:指示異常捕獲時的異常等級; M[1]:reserved M[0]:為0則SP_EL0 or為1則 SP_ELX |
| PSTATE |
\ |
不是一個寄存器,是保存當前PE狀態的一組寄存器統稱(每個PE對應一組PSTATE),屬於ARMv8新增內容,可以使用MRS和MSR通過特殊功能寄存器進行訪問,可訪問寄存器有: NZCV:對應PSTATE域為N,Z,C,V DAIF:對應PSTATE域為D,A,I,F CurrentEl:對應PSTATE域為EL SpSel:對應PSTATE域為SP nRW:處理器狀態(0-64bit,1-32bit); SP:棧指針選擇(0-SP_EL0,1-SP_ELn) |
2.2 AARCH32下指令運行與異常處理寄存器
| 寄存器類型 |
BIT |
描述 |
| R0-R14 |
32bit |
通用寄存器,但是ARM不建議使用有特殊功能的R13,R14,R15當做通用寄存器使用. |
| V0-V31 |
64bit |
32個浮點寄存器,用於標量的浮點操作和向量或標量的SIMD操作 |
| PC |
32bit |
通常稱R15為程序計算器PC指針,AArch32 中PC指向取指地址,是執行指令地址+8,AArch64中PC讀取時指向當前指令地址. |
| SP_x |
32bit |
通常稱R13為堆棧指針,除了Sys模式外,其他各種模式下都有對應的SP_x寄存器:x ={ und/svc/abt/irq/fiq/hyp/mon} |
| LR_x |
32bit |
稱R14為鏈接寄存器,除了Sys模式外,其他各種模式下都有對應的LR_x寄存器:x ={ und/svc/abt/svc/irq/fiq/mon},用於保存程序返回鏈接信息地址,AArch32環境下,也用於保存異常返回地址,也就說LR和ELR是公用一個,AArch64下是獨立的. |
| ELR_hyp |
32bit |
Hyp mode下特有的異常鏈接寄存器,保存異常進入Hyp mode時的異常地址 |
| CPSR |
32bit |
記錄當前PE的運行狀態數據,CPSR.M[4:0]記錄運行模式,AArch64下CPSR使用PSTATE代替
|
| APSR |
32bit |
應用程序狀態寄存器,EL0下可以使用APSR訪問部分PSTATE值 |
| SPSR_x |
32bit |
是CPSR的備份,除了User和Sys模式外,其他各種模式下都有對應的SPSR_x寄存器:x ={ und/svc/abt/irq/fiq/hpy/mon},注意:這些模式只適用於32bit運行環境 |
2.3 AArch64與AArch32 寄存器映射

圖 AARCH64與AARCH32映射
3. 系統控制和狀態寄存器
3.1 AARCH64下系統控制與狀態寄存器
系統寄存器主要用作系統配置和狀態顯示,主要通過MRS和MSR指令進行訪問,寄存器的名字數字給出了可以訪問的最低異常級別。
| 寄存器類型 |
Bit |
描述 |
| System regs |
\ |
備注: HCR_EL2.{TEG,AMO,IMO,FMO,RW}控制EL0/EL1的異常路由 邏輯1允許; SCR_EL3.{EA,IRQ,FIQ,RW}控制EL0/EL1/EL2的異常路由 邏輯1允許; 保存異常進入ELx時的異常綜合信息,包含異常類型EC等 |
3.2 AARCH32下系統控制與狀態寄存器
| 寄存器類型 |
BIT |
描述 |
| HCR |
32bit |
EL2特有,HCR.{TEG,AMO,IMO,FMO,RW}控制EL0/EL1的異常路由 |
| SCR |
32bit |
EL3特有,SCR.{EA,IRQ,FIQ,RW}控制EL0/EL1/EL2的異常路由,注意EL3始終不會路由 |
| VBAR |
32bit |
保存任意異常進入非Hyp mode & 非Monitor mode的跳轉向量基地址 |
| HVBAR |
32bit |
保存任意異常進入Hyp mode的跳轉向量基地址 |
| MVBAR |
32bit |
保存任意異常進入Monitor mode的跳轉向量基地址 |
| ESR_ELx |
32bit |
保存異常進入ELx時的異常綜合信息,包含異常類型EC等,可以通過EC值判斷異常class |
| PSTATE |
|
不是一個寄存器,是保存當前PE狀態的一組寄存器統稱,其中可訪問寄存器有:PSTATE.{NZCV,DAIF,CurrentEL,SPSel},屬於ARMv8新增內容,主要用於64bit環境下 |
4.參考文檔
[1] DDI0487A_k_armv8_arm_iss10775.pdf






