Cortex‑M3 | xPSR 三合一结构(APSR + IPSR + EPSR)

物理上是一个 32 位寄存器 ,逻辑上拆成三个子寄存器,通过 MRS/MSR 指令按名字分别访问。

关键正误澄清

  • 物理存在:32 位 PSR 硬件触发器阵列真实存在,中断自动压栈 / 出栈、故障保存均操作该硬件;xPSR 是访问它的完整视图别名。
  • 物理不存在:APSR、IPSR、EPSR 没有独立硬件存储,只是硬件位掩码筛选出的逻辑分片视图。

"三合一" 含义:单个物理寄存器,拆分出 3 种独立分片视图,也可完整合并访问。
竖线 | 是分隔符;


表 1:APSR(应用程序状态寄存器)

只占 bit31 ~ bit27,保存算术运算标志位。

位 名称 含义
bit31 N 负标志(Negative):运算结果最高位为 1
bit30 Z 零标志(Zero):运算结果等于 0
bit29 C 进位标志(Carry):无符号溢出 / 借位
bit28 V 溢出标志(Overflow):有符号数溢出
bit27 Q 饱和标志(Saturation):DSP 饱和运算置位

访问方式 :MRS R0, APSR | MSR APSR, R0


表 2:IPSR(中断程序状态寄存器)

只占 bit8 ~ bit0,保存当前异常编号。

位 名称 含义
bit8~bit0 Exception Number 当前正在执行的异常号
值 = 0 --- 线程模式(Thread Mode),无异常
值≠0 --- 正在处理的异常编号(如 11=SVCall,15=PendSV,16=SysTick...)

访问方式 :MRS R0, IPSR | 只读(不能 MSR 写)


表 3:EPSR(执行程序状态寄存器)

位段不连续,分布在 bit26:25、bit24、bit15:10 三处。

位 名称 含义
bit26:25 ICI/IT IT(If-Then)指令块状态,ICI 部分
bit24 T Thumb 状态位,Cortex-M 上必须恒为 1,为 0 会跑 Fault
bit15:10 ICI/IT IT 指令块剩余 6 位,ICI 剩余部分

访问方式 :MRS R0, EPSR | 只读(T 位不能软件改)


三合一访问对照

指令 读出内容 对应表格
MRS R0, APSR 只有 N/Z/C/V/Q 表 1
MRS R0, IPSR 只有异常编号 表 2
MRS R0, EPSR 只有 T 和 ICI/IT 表 3
MRS R0, xPSR 上面三个全部拼起来一次读 表 1 + 表 2 + 表 3

本质:

写 xPSR 时三个子寄存器一起改;

写 APSR 只改标志位,不影响异常号和 T 位 ------ 这就是 "三合一" 的意义。

相关推荐
CodingCos3 年前
【ARMv8M Cortex-M33 系列 7.1 -- xPSR | CFSR | HFSR | BFAR | MMFAR 寄存器】
单片机·bfar·mmfar·cfsr·xpsr