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体系 ...
 
随机推荐
- 洛谷 P2466 Sue的小球 解题报告
			
P2466 [SDOI2008]Sue的小球 题目描述 Sue和Sandy最近迷上了一个电脑游戏,这个游戏的故事发在美丽神秘并且充满刺激的大海上,Sue有一支轻便小巧的小船.然而,Sue的目标并不是当 ...
 - 淘宝助理导出的csv文件使用的是什么编码,您猜?
			
今天下午用Java读取从淘宝助理 V4.3 Beta1导出的csv文件,出现中文乱码情况. 一看就是文件编码引起的,不清楚淘宝助理导出的csv文件使用了什么编码,到百度搜索了一下,看到一些相关文章,但 ...
 - ReactNative快速入门
			
首先放图 这就是我通过简单的搭建环境写出的helloworld和使用的button组件. 那么搭建环境如何搭建呢? 使用的软件有:Node 最新版,Python2.7,Android环境要有配置And ...
 - 关于chrome控制台出现代码叠加页面不能正常显示大小问题
			
见下图页面出现在chrome中的情况 描述状态:代码都变小了才出现控制台代码叠加问题 解决办法:使用鼠标滚轮放大代码就行啦,在设置里面让页面的大小显示为100%就可以了.
 - es6/es7/es8常用新特性总结(超实用)
			
本文标题有误导性,因为我其实想写node8的新特性,说实话一下子从node v1.x跳跃到node 8.x+ 真有点受宠若惊的感觉.一直觉得node 数组. 对象.序列等的处理没有python方便,因 ...
 - aop 初探
			
1.首先是配置文件: 上图是让aop配置正确,不报红: 完整代码: <?xml version="1.0" encoding="UTF-8"?> & ...
 - JS,JQ及时监听input值的变化,MUI的input搜索框里的清除按钮的点击监听事件
			
JS: document.getElementById("input对象的ID").addEventListener('input',function(){ console.log ...
 - 自动清理MySQL binlog日志
			
开启MySQL binlog日志的服务器,如果不设置自动清理日志,默认binlog日志一直保留着,时间一长,服务器磁盘空间被binlog日志占满,导致MySQL数据库出错. 使用下面方法可以安全清理b ...
 - jenkins Pipeline 使用
			
说明 Jenkins pipeline 是一套插件,支持将连续输送管道实施和整合到Jenkins.Pipeline提供了一组可扩展的工具,用于通过管道DSL为代码创建简单到复杂的传送流水线.他目前支持 ...
 - GoLang基础数据类型--->数组(array)详解
			
GoLang基础数据类型--->数组(array)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Golang数组简介 数组是Go语言编程中最常用的数据结构之一.顾名 ...
 
			
		




