ARMV8 datasheet學習筆記4:AArch64系統級體系結構之編程模型(2)- 寄存器


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM