基础篇(二).ARMv8寄存器(2)

ARMv8寄存器(2)


上一章介绍了ARMv8 通用寄存器和各种特殊寄存器,本章重点介绍一些常见的系统寄存器。

1.概要

在AArch64中,系统配置通过系统寄存器进行控制,并使用MSR和MRS指令进行访问。ARM架构的之前版本(如ARMv7)使用协处理器来进行系统配置。 但是,AArch64不支持协处理器。

AArch64中系统寄存器会以”_ELn“的方式名命,寄存器的名称会告诉你可以访问它的最低异常级别。

  • <Reg>_EL1:处理器处于EL1、EL2、EL3时可以访问。
  • <Reg>_EL2:处理器处于EL2、EL3时可以访问。
  • 大部分寄存器不支持处于EL0时访问,但也有一些例外,如CTR_EL0。

例如

TTBR0_EL1可以从EL1、EL2和EL3访问。
TTBR0_EL2可以从EL2和EL3访问。

可以采用以下形式来访问系统寄存器:

MRS x0, TTBR0_EL1 // 把 TTBR0_EL1 的值保存到x0
MSR TTBR0_EL1, x0 // 把x0 的值写入TTBR0_EL1寄存器

下表显示了异常级别,这些异常级别具有每个寄存器的单独副本。 例如,单独的辅助控制寄存器(ACTLR)以ACTLR_EL1,ACTLR_EL2和ACTLR_EL3的形式存在。

名称 寄存器 说明 n的允许值
ACTLR_ELn 辅助控制寄存器 控制处理器特定的功能。 1,2,3
CCSIDR_ELn 当前缓存大小ID寄存器 提供有关当前所选缓存的体系结构的信息。 1
CLIDR_ELn 缓存级别ID寄存器 在每个级别上实现的单个或多个高速缓存的类型

缓存层次结构的一致性级别和统一级别。
1,2,3
CNTFRQ_ELn 计数器频率寄存器 报告系统计时器的频率。 0
CNTPCT_ELn 计数器物理计数寄存器 保持64位的当前计数值。 0
CNTKCTL_ELn 计数器内核控制寄存器 控制从虚拟计数器生成事件流。还控制从EL0访问物理计数器,虚拟计数器,EL1物理计时器和虚拟计时器。 1
CNTP_CVAL_ELn 计数器物理计时器比较值寄存器 保存EL1物理计时器的比较值。 0
CPACR_ELn 协处理器访问控制寄存器 控制对跟踪,浮点和SIMD功能的访问。 1
CSSELR_ELn 缓存大小选择寄存器 通过指定所需的缓存级别和缓存类型(指令或数据缓存),选择当前的缓存大小ID寄存器CCSIDR_EL1。 1
CNTP_CTL_ELn 计数器物理控制寄存器 控制EL1物理计时器的寄存器。 0
CTR_ELn 缓存类型寄存器 有关集成缓存体系结构的信息。 0
DCZID_ELn 数据缓存零ID寄存器 指示数据缓存零根据虚拟地址(DCZVA)系统指令写入字节值为0的块大小。 0
ELR_ELn 异常链接寄存器 保存导致异常的指令的地址。 1,2,3
ESR_ELn 异常综合特征寄存器 包括有关异常原因的信息。 1,2,3
FAR_ELn 故障地址寄存器 保存虚拟错误地址。 1,2,3
FPCR 浮点控制寄存器 控制浮点扩展行为。该寄存器中的字段映射到AArch32 FPSCR中的等效字段。 .
FPSR 浮点状态寄存器 提供浮点系统状态信息。该寄存器中的字段映射到AArch32 FPSCR中的等效字段。 .
HCR_ELn Hypervisor 配置寄存器 控制虚拟化设置,并将异常情况捕获到EL2。 2
MAIR_ELn 存储器属性间接寄存器 在ELn的阶段1翻译的Long-descriptor格式转换表项中,提供对应于可能值的存储器属性编码。 1,2,3
MIDR_ELn 主ID寄存器 代码运行的处理器类型(部件号和版本)。 1
MPIDR_ELn 多处理器密切关系的寄存器 处理器和群集ID,在多核或群集系统中。 1
RVBAR_ELn 基于地址寄存器的重置向量 保存重置向量的基地址,以便发送给ELn的任何异常。 1,2,3
SCR_ELn 安全配置寄存器 控制安全状态和EL3的异常情况。 3
SCTLR_ELn 系统控制寄存器 控制架构功能,例如MMU,缓存和对齐检查。 0,1,2,3
SPSR_ELn 保存的程序状态寄存器 当发生异常时,保持已保存的处理器状态。 abt,fiq,irq,und,1,2,3
TCR_ELn 转换控制寄存器 确定哪个转换表基地寄存器定义了转换表行走(translation table walk)的基地址,该基地址是ELn中,内存访问阶段1转换所需要的。

还控制转换表格式并保存可缓存和可共享的信息。
1,2,3
TPIDR_ELn 用户读/写线程ID寄存器 为了操作系统管理的目的,提供一个在ELn上执行的软件可以存储线程标识信息的位置。 0,1,2,3
TPIDRRO_ELn 用户只读线程ID寄存器 提供在EL1或更高版本上执行的软件可以存储线程标识信息的位置。为了操作系统管理的目的,在EL0上执行的软件可以看到这些信息。 0
TTBR0_ELn 转换表基址寄存器0 保存转换表0的基地址,以及它占用的内存的信息。这是ELn内,内存访问阶段1转换的转换表之一。 1,2,3
TTBR1_ELn 转换表基址寄存器1 保存转换表1的基地址,以及它占据的存储器的信息。

这是在EL0和EL1内,内存访问阶段1转换的转换表之一
1
VBAR_ELn 基于向量的地址寄存器 保存异常基地址,以便发送到ELn的任何异常。 1,2,3
VTCR_ELn 虚拟化转换控制寄存器 控制来自非安全EL0和EL1的内存访问阶段2转换所需的转换表步行。还保存访问的可缓存和可共享信息。 2
VTTBR_ELn 虚拟化转换表基址寄存器 保存来自非安全EL0和EL1的内存访问阶段2转换的转换表的基地址。 2

下面我们介绍几组重要的系统控制寄存器。

2 .系统控制寄存器(SCTLR_ELn)

系统控制寄存器(SCTLR)是一个用来控制标准内存、配置系统能力、提供处理器核状态信息的寄存器。包括 SCTLR_EL1、 SCTLR_EL2和 SCTLR_EL3。但是并不是所有bit在EL1都可用。
在这里插入图片描述
需要注意的是,有些域在EL1下不能访问。

寄存器各个字段介绍:

描述
UCI 设置此位后,在AArch64中为DC CVAU、DC CIVAC、DC CVAC和IC IVAU指令启用EL0访问。
EE 异常字节顺序。0表示小端,1表示大端。
EOE EL0显式数据访问的字节序。0表示小端,1表示大端。
WXN 写权限不可执行 XN (eXecute Never)。 0表示可写区域不设置不可执行权限(XN),1表示可写区域强制为不可执行(XN)
nTWE 不陷入WFE,此标志为1表示WFE作为普通指令执行
nTWI 不陷入WFI, 此标志为1表示WFI作为普通指令执行
UCT 此标志为1时,开启AArch64的EL0下访问CTR_EL0寄存器
DNE EL0 下访问 DC AVA指令,0 禁止执行,1 允许执行
I 开启指令缓存,这是在EL0和EL1下的指令缓存的启用位。对可缓存的正常内存的指令访问被缓存。
UMA 用户屏蔽访问。当EL0使用AArch64,控制从EL0的中断屏蔽访问。
SED 禁止SETEND。在EL0使用AArch32禁止SETEND指令。0 使能,1 禁止
ITD 禁止IT指令。0表示IT指令有效,1表示IT指令被当作16位指令。仅另外16位指令或32位指令的头16位可以使用
CP 15BEN CP15 barrier使能。如果实现了,它是AArch32 CP15 DMB,DSB和ISB barrier操作的使能位
SA0 EL0的栈对齐检查使能位
SA
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老衲不依

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值