ARMv8-A General-Puspose Registers

ARM8v-A提供了31个通用寄存器,分别是X0-X30。每个寄存器是64bits,可以在任何Exception Level访问。

可以看到ARMv8-A总共提供了31个通用寄存器,分别为X0-X30。其中X29是栈帧寄存器,X30是LR链接寄存器。

因为ARMv8-A为了兼容32位应用程序,所以放ARMv8-A中运行32位应用程序的时候,会时候W0-W30寄存器。只使用其中的低32位。

可以看出每一个64位bits的通用寄存器,其中就存在一个32bits的寄存器。当在ARMv8-A中运行32位应用程序时,只使用低32位。

比如:当写0xFFFFFFFF到W0寄存器的时候,就会设置X0为0x00000000FFFFFFFF

ARMv8-A Special Registers

ARMv8-A除过提供了31个通用寄存器外,还提供了一些特殊的寄存器。

  • Program Counter:PC程序计数寄存器,是一个各个EL通用的一个寄存器。
  • Stack Pointer: 栈顶指针寄存器,用来描述各个栈顶的指针寄存器。这个寄存器在每个EL都会存在一个SP_EL0, SP_EL1, SP_EL2, SP_EL3. 通过此寄存器就可以确定当前在那个EL
  • Saved Program Status Register: 程序状态寄存器。
  • Exception Link Register: 异常链接寄存器,保存着异常状态返回的地址
  • 比如当一个异常发生时,处理器必须去处理异常。处理异常时候就需要使用SPSR寄存器保存异常处理前的处理器状态,就是所谓的硬件上保存现场
  • 当处理器处理完异常后,就需要从异常返回,则就需要从ELR寄存器中返回,然后再使用SPSR寄存器恢复现场即可。

ARMv7 Register

ARMv7提供了16个通用寄存器,分别是R0-R15。其中R0-R14是用于存储数据的通用寄存器,R15是程序计数器PC寄存器。这里和ARMv8的区别是ARMv8-A的PC寄存器不属于通用寄存器了

同时ARMv7中也提供了CPSR(Current Program Status Register)描述当前处理器状态的寄存器。SPSR(Saved Progarm Status Register)用于保存CPSR的状态寄存器

如上图就是ARMv7的寄存器描述表,在每种处理器模式下各个寄存器都有不同的含义。

  • 在USER模式下,R0-R15是通用寄存器用来存储数据
  • 当比如发生IRQ时,处理器会切换到IRQ模式。此时就会用SPSR_irq保存当前处理器的状态,然后再IRQ模式就会使用SP_irq的堆栈,返回的时候使用LR_irq寄存器。
  • ARMv7在后期为了支持虚拟化,引入了HYP模式,为了兼容ARMv8引入了ELR_hyp寄存器,用于从异常状态返回。

因为ARMv8-A是兼容ARMv7的32位应用程序的,当在ARMv8-A中运行32位应用程序发生了异常,则寄存器的map如下

  • 因为在ARMv8下已经不存在user,sys.FIQ,IRQ等处理器模式。
  • 而且各个处理器模式的SP,LR已经由ARMv8其余的寄存器替代了
  • 当异常发生在EL1时,由SPSP_EL1来保存处理器的状态,放异常发生在EL2时,由SPSP_EL2保存处理器的状态等
  • 这样一来ARM64由于寄存器更多,则异常切换的效率就更高了。

ARMv8-A vs ARMv7 Registers相关推荐

  1. 【arm cpu架构体系】【armV8】【armv7】【A系列的CPU】

    为了给大家介绍一个更直观的感受,请看下面这张图 如图所示,绿色的部分都是v7-A的架构,蓝色的是v8-A架构,基本上绿色都是可以支持到32和64位的,除了A32,只支持到32位.在右边的每个部分,比如 ...

  2. 手机指令集:armv7 armv8

    经验总结: 手机指令集主要跟芯片相关,如果是c端,就默认是arm芯片了,也只有arm芯片才有armv7和armv8之分. 如果上MNN的话,MNN的量化都是做在armv8上的 现在c端大部分都是64位 ...

  3. armv8 ARM64 AARCH64

    最近工作比较繁忙,因此论坛尽管几乎每天都登录一次,不过回贴.发帖都比较少- 在除夕之前,想写点东西给各位参考,呵呵- 最近在制作iOS版的CPU Dasher64,针对64位ARMv8架构.ARMv8 ...

  4. ARMv8 Linux内核异常处理过程分析

    NOTE:为了方便大家阅读,制作了PDF版文档,下载请猛戳这里 老样子,为了赚点积分下载其他人的文件,下载以上资料需要资源分2分, 如果没有积分请留言所有文档,留下邮箱即可. 看了Linaro提供的开 ...

  5. ARMv8与linux的新手笔记

    ARMv8 與 Linux的新手筆記 by loda hlchou@gmail.com 從iPhone 5S採用ARMv8處理器架構後,對於ARMv8 64bits的相關討論很多,也受到大家關注,Go ...

  6. ARMv8 與 Linux的新手筆記

    ARMv8 與 Linux的新手筆記 by loda hlchou@gmail.com 從iPhone 5S採用ARMv8處理器架構後,對於ARMv8 64bits的相關討論很多,也受到大家關注,Go ...

  7. ARMv8 ARM64 架构 整体介绍

    这里整理一些 arm64(aarch64是armv8下面的一个工作状态,一般我们将其称为arm64?) 在这里不考虑 aarch32 这里的主要内容是 手册 arm ARM arm ARM// cpu ...

  8. arm架构的linux芯片方案,ARM推64位处理器架构ARMV8及芯片[多图]

    北京时间10月31日消息,ARM宣布推出ARMv8 64位架构指令集之际,Applied Micro Circuits Corporation(AMCC)就推出了面向服务器市场的处理器X-Gene. ...

  9. 一篇文章读懂Armv8 AArch64

    Armv8是Armv7之后的一个重要架构更新.其中一个主要的变化是引入了64的架构,即AArch64.AArch64状态只有在Armv8架构中才有.而且在AArch64状态下执行的代码只能使用A64指 ...

  10. [register]-04-ARMv8的寄存器简介和总结

    ★★★ 友情链接 : 个人博客导读首页-点击此处 ★★★ 在介绍寄存器之前,我们先看下ARM中都有什么,以arm为例: 1.通用寄存器 (1).armv7\color{red}{arm v7}armv ...

最新文章

  1. 【控制】《复杂运动体系统的分布式协同控制与优化》-方浩老师-第8章-固定翼飞行器的编队跟踪与姿态调节一体化控制
  2. 代理模式(Proxy)简介
  3. [云炬创业基础笔记]第四章测试20
  4. Reversing Ethereum Smart Contracts: Part 2
  5. win10无法连接wifi_手机连接WIFI但是无法上网?3个办法帮您解决!
  6. ITK:演示所有运算符
  7. Vue成大学核心课程
  8. python3入门代码-Python3 教程 | 菜鸟教程
  9. python html解析_Python HTML解析器
  10. 《JavaScript语言精粹》笔记(内附《JavaScript语言精粹》百度云下载链接)
  11. 微信 - 微信语音转发好友 / 朋友圈方法
  12. 前端实时可视化开发工具的使用
  13. 应用代码(4)——基于ADS1110芯片的高精度温度(PT1000)采集
  14. 20110609 WindowsLive Writer插件 测试
  15. python牛顿环测量曲率半径
  16. hibernate报错could not insert
  17. Hazel游戏引擎(001-003)
  18. 罗克韦尔自动化发布2019年企业责任报告,并启动新的企业责任与可持续发展在线内容中心
  19. Java JVM 动态方法调用之方法句柄 MethodHandle
  20. 5G专网是个大西瓜(一):价值之问

热门文章

  1. (9.19更新:八戒退款) 砸进七万块,没想到你是这样的猪八戒网
  2. SQL拼接自己需要的字符串
  3. 微信小程序之----加载中提示框loading
  4. Android学习笔记一:Android基本组件和Activity生命周期
  5. 算法笔记2-优先队列(堆)(上)
  6. maven仓库--私服(Nexus的配置使用)
  7. 那些花儿,从零构建Vue工程(webpack4 Eslint git hooks...)
  8. php 用header()下载文件在firefox下没有后缀名
  9. javascript的模块开发方法;
  10. 弎问笔录30 之 狐狸和兔子(二)