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
ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(2)- 寄存器的更多相关文章
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(4)- 其它
1. 前言 2.可配置的指令使能/禁用控制和trap控制 指令使能/禁用 当指令被禁用,则这条指令就会变成未定义 指令Trap控制 控制某条或某些指令在运行时进入陷阱,进入陷阱的指令会产生trap异常 ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(3)- 异常
1.前言 本文介绍异常相关内容,包括异常类型,异常进入,异常返回,异常层次结构,异常的路由等 2. RESET ARMV8体系结构支持两种类型的RESET Cold reset:Reset PE所有 ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(1)-EL/ET/ST
1.前言 ARMV8系统级编程模型主要包括异常级别.运行状态.安全状态.同步异常.异步异常.DEBUG 本文主要对系统级编程模型做一个概要介绍 2. 异常级别 2.1 Exception level概 ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之存储模型
1.前言 关于存储系统体系架构,可以概述如下: 存储系统体系结构的形式 VMSA 存储属性 2. 存储系统体系结构 2.1. 地址空间 指令地址空间溢出 指令地址计算((address_of ...
- ARMV8 datasheet学习笔记5:异常模型
1.前言 2.异常类型描述 见 ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(1)-EL/ET/ST 一文 3. 异常处理路由对比 AArch32.AArch64架 ...
- ARMV8 datasheet学习笔记3:AArch64应用级体系结构
1.前言 本文主要从应用的角度介绍ARMV8的编程模型和存储模型 2. AArch64应用级编程模型 从应用的角度看到的ARM处理器元素: 可见的元素(寄存器/指令) 说明 可见的寄存器 R0-R30 ...
- ARMV8 datasheet学习笔记1:预备知识
1. 前言 ARMv8的架构继承以往ARMv7与之前处理器技术的基础; 除了支持现有的16/32bit的Thumb2指令外,也向前兼容现有的A32(ARM 32bit)指令集. 基于64bit的AAr ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之Generic timer
1.前言 2.generate timer 2.1 概述 提供了一个系统计数器,用来实时测量流逝的时间: 提供了一个虚拟计数器,用来测量某个虚拟机上流逝的虚拟时间: 定时器,每隔一段时间会触发事件,支 ...
- ARMV8 datasheet学习笔记2:概述
1. 前言 本文主要概括的介绍ARMV8体系结构定义了哪些内容,概括的说: ARM体系结构定义了PE的行为,不会定义具体的实现 ARM体系结构也定义了debug体系结构和trace体系结构 ARM体系 ...
随机推荐
- 【转】安全加密(五):如何使用AES防止固件泄露
本文导读 随着电子产品更新换代速度的加快,往往都会进行系统升级或APP功能维护升级,但是由此产生了两个主要问题.首先,由于更新过程中出现错误,该设备可能变得无用:另外一个主要问题是:如何避免未经授权的 ...
- CF848E Days of Floral Colours——DP+多项式求逆/分治NTT
官方题解:http://codeforces.com/blog/entry/54233 就是由简入繁 1.序列处理,只考虑一个半圆 2.环形处理(其实这个就是多了旋转同构) 然后基于分割线邻居的跨越与 ...
- (转)Maven中的DependencyManagement和pluginmanagement
背景:最近在学习maven的多模块构建过程中看到DependencyManagement选项,对这个选项的使用做个记录! 区别与联系 这里介绍一个在父项目中的根结点中声明dependencyManag ...
- poj 3276(反转)
传送门:Problem 3276 参考资料: [1]:挑战程序设计竞赛 先献上AC代码,题解晚上再补 题意: John有N头牛,这些牛有的头朝前("F"),有的朝后("B ...
- Hadoop基础-完全分布式模式部署yarn日志聚集功能
Hadoop基础-完全分布式模式部署yarn日志聚集功能 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 其实我们不用配置也可以在服务器后台通过命令行的形式查看相应的日志,但为了更方 ...
- CentOS6.x下源码安装MySQL5.5
1. 更新yum源:http://www.cnblogs.com/vurtne-lu/p/7405931.html 2. 卸载原有的mysql数据库 [root@zabbix ~]# yum -y r ...
- 【DS】排序算法的稳定性
主要的排序算法有八种:直接插入排序,希尔排序(这两种统称为插入排序),冒泡排序,快速排序(这两种统称为交换排序),直接选择排序,堆排序(这两种统称为选择排序),归并排序,基数排序.今天我们就讨论一下它 ...
- 常用的Date对象和Math对象方法
Date对象方法: 当前用户本地时间 let time = new Date(); 获取整数年 console.log(time.getFullYear()); 获取当前月(月份要加1) consol ...
- JavaScript 数字转汉字+element时间选择器快速选择
window.CN = { : '一', : '二', : '三', : '四', : '五', : '六', : '七', : '八', : '九', : '零' } window.LEVEL = ...
- 基于Redis主从复制读写分离架构的Session共享(Windows Server)
搭建主从复制 1.安装软件 下载Redis-x64-3.2.100.zip:https://github.com/MicrosoftArchive/redis/releases 第一步:将Redis拷 ...





