ARM指令集——模式和基本概况

基本名词解释

  • A类指令集(Application profile)
    • 支持MMU虚拟内存
    • 支持ARM和Thumb指令集
  • R类指令集(Real-Time profile)
    • 面向实时操作系统
    • 不支持虚拟内存系统,支持MMU内存保护
  • M类指令集(Microcontroller profile)
    • 仅支持Thumb变体指令集,针对低成本嵌入式环境优化,功耗低代码密度高。
  • 嵌入式系统
    • 用于运行特定任务的计算机系统

ARM现状既树莓派4B现阶段情况

ARM公司不制造芯片,开发微处理器设计并授权给其他公司,集成到芯片上。通过定义体系结构规范实现兼容性。

树莓派4B的IP核心是Cortex-A72,兼容ARMv7-A规范,故应主要参考相关参考文档。尽管ARMV8有一些改变,但是比赛要求的的指令集指定armv7,故主要参考Cortex-A(armV7)编程手册。

寄存器概况

16个32位通用寄存器(R0-R15),4GB虚拟地址空间。

按照约定,其中0-12是通用目的寄存器,R13是SP,R14是LR(Link register),R15是Counter。

另外有CPSR寄存器和SPSR(Saved Program Status Register)两个寄存器。

Banking技术

根据当前所处的模式,寄存器的值可能处于不同物理位置。也就是说,对于某些模式,不会共用User模式下的寄存器。以下描述中“共用”表示与User模式是否共用,不共用则表示该模式下该寄存器有独属的值。

举例来讲,FIQ下访问SP寄存器,访问到的不是User模式下的值,而是FIQ自己的值。对应地,User下访问SP寄存器访问到的是User模式下的值。相当于北航OS课设中切换上下文的硬件实现。

  • R0-R7、R15在所有模式下都共用。
  • SYS和User共用所有通用寄存器。
  • R13(SP),R14(LR)除Sys外不共用。

R13总是代表OS的栈指针。

R14表示返回地址(RA)。进入异常状态时,R14保存了发生异常时的R15。

R15类似北航CO课设的NPC,ARM模式下比当前指令提前8字节,Thumb模式下提前4字节。

PSR(Program Status Register)

CPSR存储当前状态,APSR时用户模式下的CPSR视图。

CPSR存储:

  1. APSR标记
  2. 当前处理器模式
  3. 屏蔽中断标记
  4. 当前处理器模式(ARM/Thumb/…)
  5. 大小端
  6. IT块执行的标记位

进入异常时,CPSR自动拷贝到对应异常模式的SPSR中。

APSR只能访问NZCVQ和GE比特。通常这些比特被分支语句用来保存结果。

CPSRbit视图:

  • 31-27:
    • N:ALU结果取反
    • Z:ALU零结果
    • C:ALU操作进位
    • V:ALU操作溢出
    • Q:累积状态
  • 26-25:
    • IT:空
  • 24:
    • J:核心是否处于Jazelle状态
  • 23-20:保留
  • 19-16:
    • GE:被SIMD指令使用
  • 15-10:
    • IT[7:2]:Thumb2指令集中If-Then条件处理使用
  • 9-5:
    • E:控制load-store字节序
    • A:屏蔽异步中断
    • I:屏蔽IRQ
    • F:屏蔽FIQ中断
    • T:表示核心是否处于Thumb状态
  • 4-0:
    • M:表示处理器模式

用户模式下不能操作M位和AIF位,特权下可以操作M以进入对应状态,通常状态转换随异常事件自动完成。

CP15协处理器

协处理器中有c0-c15十六个主寄存器,用来控制核心的特性。

运行模式

不考虑扩展,有六个特权模式和一个用户模式

  • User 非特权,正常运行
  • FIQ中断
  • IRQ中断
  • Supervisor
  • Abort 内存访问异常
  • Undef 未定义指令异常
  • System 操作系统级别,共享用户寄存器

扩展

安全扩展

TrustZone 安全扩展在原有的特权级别之外定义了安全世界和非安全世界,增加了监视模式(Monitor mode),MON中的软件控制两个世界的切换,非安全世界无法访问安全世界中申请的内存。

虚拟化扩展

虚拟机监视器模式(Hyp)在ARMv7中添加,独立于现有的六个特权模式之外。

如果虚拟化拓展被实现,非安全状态时特权级别与之前不同,分为PL0,PL1,PL2三个级别。

  • PL0表示应用程序级别,在User mode中执行。
  • PL1表示所有User mode、Hyp mode之外的的模式中运行,操作系统通常在此处运行。
  • PL2表示Hyp mode,虚拟机监视器运行在此处。虚拟机监视器可以切换运行在PL1的Guest系统,并可以实现多系统共用处理器。

特权级别表示了当前状态下访问资源的能力。

安全扩展和虚拟化扩展共存

Hyp模式运行在非安全模式下、MON运行在安全模式下,仅有Hyp运行在PL2、UserMode运行在PL0,其余所有模式均运行于PL1(无论是否在安全模式下)

识别当前模式

当前模式和执行状态保存在Current Program Status Register(CPSR)中。

ARM汇编语言

Licensed under CC BY-NC-SA 4.0
京ICP备2021032224号-1
Built with Hugo
主题 StackJimmy 设计
vi ./themes/hugo-theme-learn/layouts/partials/footer.html