ARM架构的基本知识

ARM两种授权

  • 体系结构授权, 一种硬件规范, 用来约定指令集, 芯片内部体系结构(内存管理, 高速缓存管理), 只约定每一条指令的格式, 行为规范, 参数, 客户根据这个规范自行设计与之兼容的处理器
  • 处理IP授权, ARM公司根据某个版本的体系结构设计处理器, 再把处理器设计方案授权给客户

ARM体系结构又根据不同的应用场景分为3种系列

  • A系列: 面向性能密集型系统的应用处理器内核
  • R系列: 面向实时应用的高性能内核
  • M系列: 面向各类嵌入式应用的微控制内核

ARMv8体系结构中的基本概念

ARM处理器实现的是精简指令集体系结构。在ARMv8体系结构中有如下一些基本概念和定义。

  • 处理机(Processing Element,PE):在ARM公司的官方技术手册中提到的一个概念,把处理器处理事务的过程抽象为处理机。
  • 执行状态(execution state):处理器运行时的环境,包括寄存器的位宽、支持的指令集、异常模型、内存管理以及编程模型等。ARMv8体系结构定义了两个执行状态。
    • AArch64:64位的执行状态。
      • 提供31个64位的通用寄存器。提供64位的程序计数(Program Counter,PC)指针寄存器、栈指针(Stack Pointer,SP)寄存器以及异常链接寄存器(Exception Link Register,ELR)。
      • 提供A64指令集。定义ARMv8异常模型,支持4个异常等级,即EL0~EL3。
      • 提供64位的内存模型。定义一组处理器状态(PSTATE)用来保存PE的状态。
    • AArch32:32位的执行状态。
      • 提供13个32位的通用寄存器,再加上PC指针寄存器、SP寄存器、链接寄存器(Link Register,LR)。
      • 支持两套指令集,分别是A32和T32(Thumb指令集)指令集。
      • 支持ARMv7-A异常模型,基于PE模式并映射到ARMv8的异常模型中。
      • 提供32位的虚拟内存访问机制。
      • 定义一组PSTATE用来保存PE的状态。
  • ARMv8指令集:ARMv8体系结构根据不同的执行状态提供不同指令集的支持。A64指令集:运行在AArch64状态下,提供64位指令集支持。A32指令集:运行在AArch32状态下,提供32位指令集支持。T32指令集:运行在AArch32状态下,提供16位和32位指令集支持。
  • 系统寄存器命名:在AArch64状态下,很多系统寄存器会根据不同的异常等级提供不同的变种寄存器。系统寄存器的使用方法如下。
text 复制代码
<register_name>_Elx  //最后一个字母 x 可以表示0、1、2、3

如SP_EL0表示在EL0下的SP寄存器,SP_EL1表示在EL1下的SP寄存器。

ARMv8处理器执行状态

ARMv8处理器支持两种执行状态------AArch64状态和AArch32状态

AArch64状态是ARMv8新增的64位执行状态,而AArch32是为了兼容ARMv7体系结构的32位执行状态

AArch42执行状态

支持16个32位的通用寄存器

ARMv8体系架构下AArch64执行状态

异常等级

确定了处理器当前运行特权级别

  • EL0:用户特权,用于运行普通用户程序。
  • EL1:系统特权,通常用于操作系统内核。如果系统使能了虚拟化扩展,运行虚拟机操作系统内核。
  • EL2:运行虚拟化扩展的虚拟机监控器(hypervisor)。
  • EL3:运行安全世界中的安全监控器(secure monitor)

ARMv8体系结构允许切换应用程序的运行模式。如在一个运行64位操作系统的ARMv8处理器中,我们可以同时运行A64指令集的应用程序和A32指令集的应用程序,但是在一个运行32位操作系统的ARMv8处理器中就不能运行A64指令集的应用程序了。

当需要运行A32指令集的应用程序时,需要通过一条管理员调用(Supervisor Call,SVC)指令切换到EL1,操作系统会做任务的切换并且返回AArch32的EL0,从而为这个应用程序准备好AArch32状态的运行环境。

通用寄存器

支持31个64位的, 分别是X0 ~ X30

可以使用W来表示低32位的数据, W0表示X0寄存器的低32位数据, W1表示X1寄存器的低32位数据

特殊寄存器
系统寄存器

ARMv8体系结构支持如下7类系统寄存器:

  • 通用系统控制寄存器;
  • 调试寄存器;
  • 性能监控寄存器;
  • 活动监控寄存器;
  • 统计扩展寄存器;
  • RAS寄存器;
  • 通用定时器寄存器。

系统寄存器支持不同的异常等级的访问,通常系统寄存器会使用"Reg_ELn"的方式来表示。

  • Reg_EL1:处理器处于EL1、EL2以及EL3时可以访问该寄存器。
  • Reg_EL2:处理器处于EL2和EL3时可以访问该寄存器。
  • 大部分系统寄存器不支持处理器处于EL0时访问,但也有一些例外,如CTR_EL0。

数据类型

支持的数据宽度

字节(8bit), 半字(16bit), 字(32bit), 双字(64bit),四字(128bit)

相关推荐
qq_177767371 小时前
React Native鸿蒙跨平台自定义复选框组件,通过样式数组实现选中/未选中状态的样式切换,使用链式调用替代样式数组,实现状态驱动的样式变化
javascript·react native·react.js·架构·ecmascript·harmonyos·媒体
小程故事多_802 小时前
深度搜索Agent架构全解析:从入门到进阶,解锁复杂问题求解密码
人工智能·架构·aigc
●VON3 小时前
React Native for OpenHarmony:项目目录结构与跨平台构建流程详解
javascript·学习·react native·react.js·架构·跨平台·von
Gary董3 小时前
高并发的微服务架构如何设计
微服务·云原生·架构
ujainu4 小时前
Flutter + OpenHarmony 实战:《圆环跳跃》——完整游戏架构与视觉优化
flutter·游戏·架构·openharmony
切糕师学AI4 小时前
ARM 架构中的复位(Reset)与复位流程
arm开发·单片机·嵌入式·复位
VekiSon4 小时前
Linux内核驱动——基础概念与开发环境搭建
linux·运维·服务器·c语言·arm开发
爬山算法4 小时前
Hibernate(74)如何在CQRS架构中使用Hibernate?
java·架构·hibernate
香芋Yu5 小时前
【大模型教程——第二部分:Transformer架构揭秘】第2章:模型家族谱系:从编码器到解码器 (Model Architectures)
深度学习·架构·transformer
MickyCode6 小时前
嵌入式开发调试之Traceback
arm开发·stm32·单片机·mcu