☰
Cortex‑M3 | xPSR 三合一结构(APSR + IPSR + EPSR)
2026/9/29 9:35:34 网站建设 项目流程

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

关键正误澄清

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

“三合一” 含义:单个物理寄存器,拆分出 3 种独立分片视图,也可完整合并访问。

竖线 | 是分隔符;


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

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

位名称含义
bit31N负标志(Negative):运算结果最高位为 1
bit30Z零标志(Zero):运算结果等于 0
bit29C进位标志(Carry):无符号溢出 / 借位
bit28V溢出标志(Overflow):有符号数溢出
bit27Q饱和标志(Saturation):DSP 饱和运算置位

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


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

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

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

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


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

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

位名称含义
bit26:25ICI/ITIT(If-Then)指令块状态,ICI 部分
bit24TThumb 状态位,Cortex-M 上必须恒为 1,为 0 会跑 Fault
bit15:10ICI/ITIT 指令块剩余 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 位 —— 这就是 "三合一" 的意义。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询