ARM (Advanced RISC Machine) 处理器有几种主要的工作模式:

  1. 用户模式 (User Mode):

    • 最低特权级别
    • 大多数应用程序在此模式下运行
    • 对系统资源的访问受限
  2. 系统模式 (System Mode):

    • 高特权级别
    • 通常用于操作系统任务
    • 可以访问所有系统资源
  3. 管理模式 (Supervisor Mode):

    • 介于用户模式和系统模式之间
    • 用于某些操作系统功能和设备驱动程序
  4. 中断模式 (IRQ Mode):

    • 处理硬件中断
    • 快速响应外部事件
  5. 快速中断模式 (FIQ Mode):

    • 用于高优先级中断
    • 比普通中断模式更快
  6. 未定义指令模式 (Undefined Mode):

    • 处理未知或非法指令
  7. 数据中止模式 (Data Abort Mode):

    • 处理内存访问错误
  8. 预取中止模式 (Prefetch Abort Mode):

    • 处理指令预取错误

这些模式允许ARM处理器有效地管理系统资源、处理异常和中断,以及实现不同级别的系统安全。不同模式有不同的寄存器集和访问权限,使得操作系统能够实现必要的保护和隔离。

ARM处理器使用多种寄存器来进行数据处理和控制。以下是ARM处理器中主要的寄存器类型:

  1. 通用寄存器 (General-Purpose Registers):

    • R0 到 R15,共16个32位寄存器
    • R13 通常用作栈指针 (SP)
    • R14 是链接寄存器 (LR),用于存储子程序返回地址
    • R15 是程序计数器 (PC)
  2. 程序状态寄存器 (Program Status Registers):

    • CPSR (Current Program Status Register):存储当前程序状态
    • SPSR (Saved Program Status Register):在模式切换时保存CPSR的副本
  3. 浮点寄存器 (在支持浮点运算的ARM处理器中):

    • 32个单精度或双精度浮点寄存器
  4. 向量寄存器 (在支持NEON指令集的处理器中):

    • 用于SIMD (单指令多数据) 操作
  5. 系统控制寄存器:

    • 用于控制处理器的各种功能,如缓存、MMU等
  6. 调试寄存器:

    • 用于调试和跟踪程序执行
  7. 协处理器寄存器:

    • 用于扩展ARM处理器的功能

每种工作模式可能会有自己特定的寄存器集,尤其是对于R13 (SP)和R14 (LR)。这种设计允许快速的上下文切换和异常处理。

CPSR寄存器尤其重要,它包含:

Thumb指令集和ARM指令集是ARM架构中两种不同的指令编码方式,它们有以下主要区别:

  1. 指令长度:

    • ARM指令:固定32位长
    • Thumb指令:主要是16位,部分扩展指令(Thumb-2)为32位
  2. 指令密度:

    • Thumb指令通常比ARM指令具有更高的代码密度,可以减少程序占用的存储空间
  3. 性能:

    • ARM指令通常能提供更高的性能,因为它们可以在一条指令中完成更复杂的操作
    • Thumb指令可能需要多条指令来完成同样的操作,但在某些情况下可能因为更好的缓存利用率而表现更好
  4. 寄存器使用:

    • ARM指令可以访问所有16个通用寄存器
    • 基本Thumb指令只能直接访问低8个寄存器(R0-R7),但Thumb-2扩展了这一限制
  5. 功能覆盖:

    • ARM指令集提供了更全面的功能
    • Thumb指令集设计为ARM指令集的子集,覆盖最常用的操作
  6. 条件执行:

    • ARM指令支持几乎所有指令的条件执行
    • 基本Thumb指令只有有限的条件执行支持,但Thumb-2扩展了这一功能
  7. 切换模式:

    • 处理器可以在ARM和Thumb模式之间切换
    • 通常使用BX(分支并交换)或BLX(分支、链接并交换)指令进行切换
  8. 使用场景:

    • ARM模式通常用于性能关键的代码段
    • Thumb模式常用于嵌入式系统,以节省存储空间和提高代码密度
  9. 编译器支持:

    • 现代编译器能够自动选择使用ARM或Thumb指令,以优化性能和代码大小
  10. 兼容性:

    • 所有支持Thumb的处理器也支持ARM指令集,但并非所有ARM处理器都支持Thumb指令集

需要注意的是,随着Thumb-2技术的引入,Thumb指令集的功能得到了显著扩展,缩小了与ARM指令集的差距。