【ARMv8 异常模型入门及渐进2 - 系统寄存器访问方法:op1,CRn,CRm,op2】

news2024/10/1 17:37:53

文章目录

    • 1.1 ARMv8 系统寄存器访问概要
      • 1.1.1 系统寄存器访问级别
      • 1.1.2 ARMv8 系统寄存器编码

1.1 ARMv8 系统寄存器访问概要

ARMv8中,取消了协处理器,之前协处理器实现的功能,全部由系统寄存器来是实现。对于系统寄存器的访问,使用 mrsmsr 指令来访问。ARM架构的之前版本 (如ARMv7) 使用协处理器来进行系统配置。 但是,AArch64 不支持协处理器。

1.1.1 系统寄存器访问级别

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寄存器

1.1.2 ARMv8 系统寄存器编码

指令编码如下:
在这里插入图片描述

图 1-1

L: 1, mrs,读取系统寄存器值到通用寄存器中;
L: 0, msr,将通用寄存器值写入到系统寄存器中;
而系统寄存器的编码,由 op1,CRn,CRm,op2 位域来决定,op1,CRn,CRm,op2 的编码组合有很多,arm 并没有将所有的组合都定义系统寄存器。

对于未使用的编码组合,arm 允许实现自定义这些系统寄存器的功能,对于自定义的系统寄存器,在写汇编程序的时候,是不能通过系统寄存器的名字去访问的,否则编译会报错为了解决访问自定义系统寄存器,arm 定义了以下格式,来表示系统寄存器

S<op0>_<op1>_c<CRn>_c<CRm0>_<op2>

在这里插入图片描述

图 1-2

从上图 1-2 的内容可以在 arch/arm64/include/asm/sysreg.h 中找打对应:

/*
 * ARMv8 ARM reserves the following encoding for system registers:
 * (Ref: ARMv8 ARM, Section: "System instruction class encoding overview",
 *  C5.2, version:ARM DDI 0487A.f)
 *      [20-19] : Op0
 *      [18-16] : Op1
 *      [15-12] : CRn
 *      [11-8]  : CRm
 *      [7-5]   : Op2
 */

比如:Trace 的寄存器 TRBTRG_EL1 的定义如下:

#define SYS_TRBTRG_EL1                  sys_reg(3, 0, 9, 11, 6)

其在手册中的编码如下:
在这里插入图片描述

图 1-2

sys_reg 中的参数分别对应 op0, op1, CRn, CRm, op2, 对于它的访问可以使用下面两个函数:

read_sysreg_s(r)
write_sysreg_s(v, r)

或者使用:

mrs x0, S3_0_c9_c11_6
msr S3_0_c9_c11_6, x0

推荐阅读:
https://community.arm.com/support-forums/f/compilers-and-libraries-forum/46782/gnu-toolchain—unknown-or-missing-system-register-gic-register—cortex-a53

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/428802.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

javaweb在校大学生贷款管理系统ns08a9

1系统主要实现&#xff1a;学生注册、填写详细资料、申请贷款、学校审核、银行审核、贷后管理等功能&#xff0c; (1) 学生注册&#xff1a;学生通过注册用户&#xff0c;提交自己的详细个人资料&#xff0c;考虑现实应用中的安全性&#xff0c;资料提交后不可修改&#xff1b;…

Springboot + MySQL+ JPA Ⅲ delete方法详解

一、deleteById(Id id) 和 delete(T entity) 为什么要把这两个方法放在一起呢&#xff1f;我们先看源码再说 deleteById源码&#xff08;通过id进行删除&#xff09; Transactional Override public void deleteById(ID id) {Assert.notNull(id, ID_MUST_NOT_BE_NULL);delet…

@爱打游戏的你,当游戏测试是什么感觉?

爱打游戏的你&#xff0c;当游戏测试是一种什么感觉&#xff1f; 去年《宝可梦朱紫》大火的那段时间&#xff0c;想必各位爱好游戏的友友们都刷到过这样的图吧&#xff1a;&#xff08;量子纠缠&#xff09;&#xff08;天怎么黑了&#xff09;&#xff08;弹簧巨怪&#xff09…

手敲Mybatis(九)-结果集处理器

1.前言-背景介绍 上节我们处理了参数处理器&#xff0c;本节我们处理结果集处理器&#xff0c;之前我们写了一个DefaultResultSetHandler&#xff0c;我们把返回结果获取对象&#xff0c;填充值什么的写到了一起&#xff0c;流程没有进行解耦&#xff0c;并且只接收了Object的…

不通过鲁大师进行硬件检测

文章目录简介dxdiag系统信息设备管理器任务管理器PowerShelldxdiag系统信息设备管理器任务管理器PowerShellTODO&#xff1a;CPU-ZTODO&#xff1a;Everest参考文献简介 不少二手电脑重装系统后发现是假配置&#xff08;特别是XP系统&#xff09;&#xff0c;可以使用系统自带…

基于Vue2实现滚动过程中数据懒加载

以下为实现滚动懒加载的过程&#xff1a; 1、在data对象中定义了items数组&#xff0c;用于存放已加载的item&#xff0c;loading状态&#xff0c;当前页数page&#xff0c;每页数量pageSize&#xff0c;以及距离底部的阈值threshold。 2、在mounted钩子函数中&#xff0c;首次…

Adaptive AUTOSAR——State Management(VRTE 3.0 R21-11)

状态管理是自适应平台服务中的一个功能集群。 在自适应平台中&#xff0c;状态决定了一组活动的自适应应用程序。 特定于项目的应用程序&#xff0c;即状态管理器&#xff0c;决定何时请求状态更改&#xff0c;从而更改当前活动的应用程序集。状态管理器是特定于项目的&#…

【Golang】三分钟让你快速了解Go语言为什么我们需要Go语言?

博主简介&#xff1a;努力学习的大一在校计算机专业学生&#xff0c;热爱学习和创作。目前在学习和分享&#xff1a;数据结构、Go&#xff0c;Java等相关知识。博主主页&#xff1a; 是瑶瑶子啦所属专栏: Go语言核心编程近期目标&#xff1a;写好专栏的每一篇文章 目录一、Go语…

Pytorch基础 - 3. torch.utils.tensorboard

目录 1. 简介 2. 基本步骤 3. 示例1 - 可视化单条曲线 4. 示例2 - 可视化多条曲线 5. 示例3 - 可视化网络结构 1. 简介 Tensorboard是Tensorflow的可视化工具&#xff0c;常用来可视化网络的损失函数&#xff0c;网络结构&#xff0c;图像等。后来将Tensorboard集成到了P…

wps如何修改已经存在的目录标题内容?

如需了解更多办公应用的相关知识&#xff0c;可进入到赛效官网查看应用资讯或者应用问答栏目。 在WPS文档中&#xff0c;为方便大家查看文档中的内容&#xff0c;可以给文档内容添加目录&#xff0c;很多人由于对文档功能不太熟悉&#xff0c;所以当目录生成以后&#xff0c;想…

高效又稳定的ChatGPT大模型训练技巧总结,让训练事半功倍!

文&#xff5c;python前言近期&#xff0c;ChatGPT成为了全网热议的话题。ChatGPT是一种基于大规模语言模型技术&#xff08;LLM&#xff0c; large language model&#xff09;实现的人机对话工具。现在主流的大规模语言模型都采用Transformer网络&#xff0c;通过极大规模的数…

Day941.仓库版本管理 -系统重构实战

仓库&版本管理 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于仓库&版本管理的内容。 当代码以及团队达到一定的规模以后&#xff0c;这会给项目仓库和版本的管理带来诸多问题。 一张常见问题的表格&#xff0c;不妨“对号入座”&#xff0c;看看项目有没…

【常见CSS扫盲雪碧图】从源码细看CSS雪碧图原理及实现,千字详解【附源码demo下载】

【写在前面】其实估计很多人都听过雪碧图&#xff0c;或者是CSS-Sprite&#xff0c;在很多门户网站就会经常有用到的&#xff0c;之所有引出雪碧图这个概念还得从前端加载多个图片时候页面闪了一下说起&#xff0c;这样给人的视觉效果体验很差&#xff0c;也就借此机会和大家说…

Linux查看串行端口

查看串口驱动 cat /proc/tty/driver/serial查看串口设备 dmesg | grep ttyS*[rootlocalhost driver]# cat /proc/tty/driver/serial serinfo:1.0 driver revision: 0: uart:16550A port:000003F8 irq:4 tx:0 rx:0 1: uart:16550A port:000002F8 irq:3 tx:0 rx:0 CTS|DSR|CD 2:…

攻防世界-inget(简单的SQL注入、万能密码)

目录 1、手工注入&#xff08;万能密码原理&#xff09; 2、sqlmap实现 3、常用参数 1、手工注入&#xff08;万能密码原理&#xff09; 打开链接&#xff0c;提示输入id并尝试绕过 尝试一下万能密码&#xff0c;使用逻辑语句使结果返回 构造payload /?id or 我们这里是…

Java虚拟机内存区域

Java虚拟机所管理的内存将会包括以下几个运行时数据区域 程序计数器 是一块较小的内存空间&#xff0c;可以看作当前线程所执行的字节码的行号指示器。分支、循环、跳转、异常处理、线程恢复等基础功能都需要通过更改这个计数器的值来改变下一条需要执行的字节码。 由于各个线…

DAY 35 sed文本编辑器

文本三剑客&#xff1a;都是按行读取后处理。 grep 过滤行内容 awk 过滤字段 sed 过滤行内容&#xff1b;修改行内容 sed编辑器 sed是一种流编辑器&#xff0c;流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流 sed编辑器可以根据命令来处理数据流中的…

Shell编程(二)

上一章&#xff1a; Shell编程_做测试的喵酱的博客-CSDN博客 七、ping shell脚本&#xff0c;是一个面向过程的编程语言&#xff0c;没有类和对象的概念。用的最多的就是函数。 查看当前服务&#xff0c;是否能ping通baidu ping www.baidu.com [rootecs-39233 dev]# ping ww…

眺望2023:房企“三大护法”如何助力穿越周期?

2022 年的地产行业尤为艰难&#xff0c;土地和商品房成交量明显下滑&#xff0c;许多房企的业绩都呈现收缩态势。 不过&#xff0c;今年以来房地产市场似乎出现企稳信号。国家统计局数据显示&#xff0c;今年1~2月全国商品房销售面积和销售额的下跌幅度明显收窄&#xff0c;住…

18-java单列集合

java单列集合1.集合体系结构1.1 单列集合1.2 双列集合2. 单列集合体系结构3.Collection集合顶层接口3.1 Collection的遍历方法3.1.1 迭代器遍历3.1.2 增强for遍历3.1.3 Lambda表达式4. List单列集合4.1 List4.1.1 List集合特点4.1.2 List集合的特有方法4.1.3 List集合遍历方法4…