文章目录

  • 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

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

  1. 【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 ...

  2. ARMV8 datasheet学习笔记5:异常模型

    1.前言 2.异常类型描述 见 ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(1)-EL/ET/ST 一文 3. 异常处理路由对比 AArch32.AArch64架 ...

  3. STM32F10xxx20xxx21xxxL1xxxx Cortex-M3程序设计手册 阅读笔记二(3):Cortex-M3处理器异常模型

    这一部分描述异常模型. 每一个异常都存在一个状态: 闲置       这个异常没有活跃,没有暂停 待进行    异常等待被处理器服务.一个外设或软件中断请求可以改变相应中断的状态到即将发生状态. ·活 ...

  4. 电气simulink常用模块_从整车控制器VCU模型入门simulink(1)

    学习一门语言或者一门技术,最烦的就是长篇大论的理论和脱离实际的练习,我想正在阅读这篇文章的你一定深有体会,既然认识到了这样的痛点,我们接下来就换一种方式来学,通过实际工程中能运用到模型来逐步入门sim ...

  5. 量化金融零基础如何入门、哪里有系统学习资料、需要考什么证书?

    量化金融零如何基础入门.哪里有系统学习资料.需要考什么证书? 1 课程知识 量化金融对口专业是金融工程,金融工程常用的技能. 概率论 数理统计 数学分析 线性代数(矩阵分析运算) 常/偏微分方程 风险 ...

  6. 三菱plc编程实例3000_三菱入门PLC编程PLC系统程序包括哪些

    三菱入门PLC编程-PLC系统程序包括哪些 包装机的种类繁多,分类方法很多.从不同的观点出发可有多种,按机械种类分为:液体包装机.粉剂包装机.颗粒包装机.贴体包装机.酱类包装机.电子组合秤包装机.枕式 ...

  7. linux 关机 日志,centos7 异常关机了,怎么查看系统的异常日志?

    centos7 异常关机了,怎么查看系统的异常日志? crash中也没有dump的文件. 这是messages日志: Feb 26 11:14:03 moon systemd-logind: Remo ...

  8. System.DllNotFoundException: 无法加载 DLL“GdltaxIA.dll”: 内存位置访问无效。 (异常来自 HRESULT:0x800703E6)。 WIN7系统

    System.DllNotFoundException: 无法加载 DLL"GdltaxIA.dll": 内存位置访问无效. (异常来自 HRESULT:0x800703E6). ...

  9. 从LeNet-5 CNN模型入门PyTorch

    从LeNet-5 CNN模型入门PyTorch 1. PyTorch 准备 1.1 PyTorch特点 1.2 PyTorch安装测试 2. 完整代码 2.1 LeNet模型 2.2 训练 2.2 测 ...

最新文章

  1. 搞懂这些框架源码,带你吊打面试官
  2. ZOJ 3633 rmq 重点在于转化
  3. Springboot整合swagger指南
  4. java 枚举类型enum
  5. 切单个图标为背景透明的方法
  6. 10.用好远程联机服务器
  7. Java Script 练习题
  8. 信息论基础——消息,信息,信号区别 信息的度量
  9. python list 交集并集差集补集
  10. 拯救不开心!我的机器人心理医生;机器学习的KPI千里追踪术;YOLO v7的PyTorch实现;李航新书『机器学习方法』开放试读 | ShowMeAI资讯日报
  11. 浅谈OSPF的DRBDR
  12. Mac OS中隐藏和显示文件的操作
  13. 数据驱动运营,为门店开拓第二增长曲线。
  14. Pgpool-II + Watchdog 设置与测试
  15. 关于adb指令安装卸载apk的几个常用命令
  16. python学习笔记之pdf文档提取
  17. ZOJ 3591 Nim (NIM博弈+统计
  18. 此矿产比稀土还值钱!振兴会杜振国 我国储量全球第一
  19. 高级驾驶辅助系统 (ADAS)教程
  20. 《Presto(Trino)——The Definitive Guide》Presto指南20版

热门文章

  1. labview与USB通信
  2. Ubuntu上火狐浏览器下载百度云盘资源
  3. 数学建模-灰色关联度分析原理笔记
  4. 5G与物联网卫星的融合通信及应用
  5. 消费者期待的低价5G套餐或有戏,中国广电地方分公司以低价宽带发起攻势
  6. 如何借助new bing修复 pyfolio: AttributeError: ‘numpy.int64‘ object has no attribute ‘to_pydatetime‘
  7. HTML之魂 - HEAD元素
  8. 解毒 Kotlin Koans: 03 函数参数、重载
  9. 一款很好用的Jquery 打印插件——jQuery.print.js
  10. 腾讯QQ首次在PC端采用气泡式聊天界面(from:36kr)