【ARMv8 异常模型入门及渐进2 - 系统寄存器访问方法:op1,CRn,CRm,op2】
文章目录
- 1.1 ARMv8 系统寄存器访问概要
- 1.1.1 系统寄存器访问级别
- 1.1.2 ARMv8 系统寄存器编码
1.1 ARMv8 系统寄存器访问概要
ARMv8中,取消了协处理器,之前协处理器实现的功能,全部由系统寄存器来是实现。对于系统寄存器的访问,使用 mrs
,msr
指令来访问。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
【ARMv8 异常模型入门及渐进2 - 系统寄存器访问方法:op1,CRn,CRm,op2】相关推荐
- 【ARMv8 异常模型入门及渐进 9 - FIQ 和 IRQ 区别】
文章目录 1.1 IRQ 与 FIQ 区别 1.1.1 ARMv7 中断向量表 1.1.2 FIQ 与 IRQ 差异 1.1.3 Linux 禁用 FIQ 1.2 ARMv8 FIQ 介绍 1.1 I ...
- ARMV8 datasheet学习笔记5:异常模型
1.前言 2.异常类型描述 见 ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(1)-EL/ET/ST 一文 3. 异常处理路由对比 AArch32.AArch64架 ...
- STM32F10xxx20xxx21xxxL1xxxx Cortex-M3程序设计手册 阅读笔记二(3):Cortex-M3处理器异常模型
这一部分描述异常模型. 每一个异常都存在一个状态: 闲置 这个异常没有活跃,没有暂停 待进行 异常等待被处理器服务.一个外设或软件中断请求可以改变相应中断的状态到即将发生状态. ·活 ...
- 电气simulink常用模块_从整车控制器VCU模型入门simulink(1)
学习一门语言或者一门技术,最烦的就是长篇大论的理论和脱离实际的练习,我想正在阅读这篇文章的你一定深有体会,既然认识到了这样的痛点,我们接下来就换一种方式来学,通过实际工程中能运用到模型来逐步入门sim ...
- 量化金融零基础如何入门、哪里有系统学习资料、需要考什么证书?
量化金融零如何基础入门.哪里有系统学习资料.需要考什么证书? 1 课程知识 量化金融对口专业是金融工程,金融工程常用的技能. 概率论 数理统计 数学分析 线性代数(矩阵分析运算) 常/偏微分方程 风险 ...
- 三菱plc编程实例3000_三菱入门PLC编程PLC系统程序包括哪些
三菱入门PLC编程-PLC系统程序包括哪些 包装机的种类繁多,分类方法很多.从不同的观点出发可有多种,按机械种类分为:液体包装机.粉剂包装机.颗粒包装机.贴体包装机.酱类包装机.电子组合秤包装机.枕式 ...
- linux 关机 日志,centos7 异常关机了,怎么查看系统的异常日志?
centos7 异常关机了,怎么查看系统的异常日志? crash中也没有dump的文件. 这是messages日志: Feb 26 11:14:03 moon systemd-logind: Remo ...
- System.DllNotFoundException: 无法加载 DLL“GdltaxIA.dll”: 内存位置访问无效。 (异常来自 HRESULT:0x800703E6)。 WIN7系统
System.DllNotFoundException: 无法加载 DLL"GdltaxIA.dll": 内存位置访问无效. (异常来自 HRESULT:0x800703E6). ...
- 从LeNet-5 CNN模型入门PyTorch
从LeNet-5 CNN模型入门PyTorch 1. PyTorch 准备 1.1 PyTorch特点 1.2 PyTorch安装测试 2. 完整代码 2.1 LeNet模型 2.2 训练 2.2 测 ...
最新文章
- 搞懂这些框架源码,带你吊打面试官
- ZOJ 3633 rmq 重点在于转化
- Springboot整合swagger指南
- java 枚举类型enum
- 切单个图标为背景透明的方法
- 10.用好远程联机服务器
- Java Script 练习题
- 信息论基础——消息,信息,信号区别 信息的度量
- python list 交集并集差集补集
- 拯救不开心!我的机器人心理医生;机器学习的KPI千里追踪术;YOLO v7的PyTorch实现;李航新书『机器学习方法』开放试读 | ShowMeAI资讯日报
- 浅谈OSPF的DRBDR
- Mac OS中隐藏和显示文件的操作
- 数据驱动运营,为门店开拓第二增长曲线。
- Pgpool-II + Watchdog 设置与测试
- 关于adb指令安装卸载apk的几个常用命令
- python学习笔记之pdf文档提取
- ZOJ 3591 Nim (NIM博弈+统计
- 此矿产比稀土还值钱!振兴会杜振国 我国储量全球第一
- 高级驾驶辅助系统 (ADAS)教程
- 《Presto(Trino)——The Definitive Guide》Presto指南20版
热门文章
- labview与USB通信
- Ubuntu上火狐浏览器下载百度云盘资源
- 数学建模-灰色关联度分析原理笔记
- 5G与物联网卫星的融合通信及应用
- 消费者期待的低价5G套餐或有戏,中国广电地方分公司以低价宽带发起攻势
- 如何借助new bing修复 pyfolio: AttributeError: ‘numpy.int64‘ object has no attribute ‘to_pydatetime‘
- HTML之魂 - HEAD元素
- 解毒 Kotlin Koans: 03 函数参数、重载
- 一款很好用的Jquery 打印插件——jQuery.print.js
- 腾讯QQ首次在PC端采用气泡式聊天界面(from:36kr)