You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cortex-M4核心寄存器数量存疑:手册表述与统计结果不符

Cortex-M4 32个核心寄存器的构成解析

首先明确:Cortex-M4的32个核心寄存器是按R0-R31的寄存器编号范围定义的,其中包含有实际功能的寄存器和保留寄存器,以下是具体构成:

1. 通用寄存器(13个)

对应R0-R12,是手册明确提到的通用寄存器组,用于常规数据操作。

2. 基础特殊寄存器(3个)

  • R13:栈指针(SP),物理上包含两个独立寄存器:主栈指针(MSP)和进程栈指针(PSP),同一时刻仅能访问其中一个,共享R13的编码
  • R14:链接寄存器(LR),用于存储函数返回地址
  • R15:程序计数器(PC),指向当前执行指令的地址

3. 系统状态与控制寄存器(7个)

对应R16-R20、R31,以及可拆分访问的子寄存器:

  • R16:PRIMASK,用于屏蔽除NMI和HardFault外的所有中断
  • R17:FAULTMASK,用于屏蔽除NMI外的所有异常
  • R18:BASEPRI,用于屏蔽优先级低于设定值的中断
  • R19:BASEPRI_MAX,BASEPRI的别名寄存器,用于简化优先级设置操作
  • R20:CONTROL,用于切换特权级别、选择当前使用的栈指针
  • R31:xPSR,程序状态寄存器,可拆分为三个独立访问的子寄存器:
    • APSR:算术状态寄存器,存储运算标志位
    • IPSR:中断状态寄存器,存储当前活跃的中断编号
    • EPSR:执行状态寄存器,存储Thumb指令集相关状态

这些子寄存器(APSR/IPSR/EPSR)常被单独列出,所以会出现“PSR是3个而非1个”的认知。

4. 保留寄存器(9个)

对应R21-R30,这些寄存器在Cortex-M4架构中没有定义实际功能,属于预留空间,手册不会详细列出,但它们仍属于32个核心寄存器的编号范围。


你统计时出现数量差异的原因:

  • TRM中仅列出有实际功能的寄存器,未包含保留的R21-R30,所以数量约16个
  • 通用用户指南中包含了xPSR的三个子寄存器、SP的两个物理寄存器等可独立访问的别名寄存器,所以数量约23个

内容的提问来源于stack exchange,提问作者abdo Salm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 09:40:16