MRS/MSR 指令操作 xPSR 寄存器 一、指令基础概述MRS、MSR是 ARM Cortex‑M 内核中唯一能够直接读写程序状态寄存器 xPSR的专用指令普通MOV/LDR/STR等数据传送指令无法访问 xPSR必须依靠这两条指令完成状态寄存器读写操作。1. MRS读状态寄存器到通用寄存器指令格式MRS Rd, xPSR ; Rd xPSR功能将 xPSR 寄存器完整数值拷贝至通用寄存器 RdR0~R15用于读取运算标志、中断状态、执行模式位等信息。2.MSR通用寄存器写入状态寄存器指令格式MSR xPSR, Rd ; xPSR Rd功能将通用寄存器 Rd 的值写回 xPSR实现手动修改状态标志位寄存器内部分硬件锁定位无法通过软件改写写入操作无效。二、xPSR 寄存器分段xPSR 由三段独立状态寄存器组成支持分段单独读写操作更精准APSR算术状态标志寄存器包含 N/Z/C/V/Q 运算结果标志软件可自由读写IPSR中断服务编号寄存器只读记录当前运行中断号MSR指令无法修改EPSR执行状态寄存器包含 Thumb 模式位、IT 条件块位关键位受硬件保护软件写入不生效。分段读写示例MRS R0, APSR ; 仅读取运算标志位 MSR APSR, R0 ; 仅修改运算标志不干扰中断、执行状态三、实操练习清除 xPSR [24]Thumb 模式位需求说明xPSR 第 24 位为 TThumb标志位xPSR[24] 1CPU 运行 Thumb 指令集Cortex‑M 内核上电默认模式xPSR[24] 0切换至 ARM 32 位指令集。重要硬件限制全系列 Cortex‑M 内核硬件仅支持 Thumb 指令若软件强制将 T 位清零CPU 会立即触发硬件异常HardFault本段代码仅用于汇编语法练习工程中不可实际使用。完整汇编代码分步写法MRS R0, xPSR ; 读取完整xPSR寄存器存入R0 MOV R1, #1 MOV R1, R1, LSL #24 ; R1 1 24生成掩码 0x01000000仅bit24置1 BIC R0, R0, R1 ; BICRn (~Op2)清零R0中第24位其余位保持不变 MSR xPSR, R0 ; 修改完成的数值写回xPSR更新状态寄存器代码逐行注释解析MRS R0, xPSR专用读状态指令获取当前全部状态标志为修改做准备。MOV R1, #1MOV R1, R1, LSL #24构造掩码仅第 24 位为 1其余比特为 0用于定位待清零的 T 位。BIC R0, R0, R1按位清除指令对 R0 和掩码取反后做与运算仅清除 bit24不改动其他标志位。MSR xPSR, R0将修改后的状态写回 xPSR完成对 T 位的清零操作。精简优化写法省去临时寄存器 R1利用立即数掩码直接操作代码更简洁MRS R0, xPSR BIC R0, R0, #(1 24) ; 直接使用立即数掩码清除bit24 MSR xPSR, R0四、MRS/MSR 使用核心约束访问 xPSR/APSR/IPSR/EPSR 仅支持 MRS、MSR普通数据传送指令编译报错IPSR 为只读寄存器执行MSR IPSR, Rx无任何效果EPSR 内 Thumb 模式位、IT 块控制位由硬件锁定软件写入无效写入 xPSR 后状态标志立即更新后续CMP/TST/ 条件分支指令可直接使用新标志特权模式可完整操作状态寄存器非特权线程模式下部分状态位存在写保护Cortex‑M 内核无法关闭 Thumb 模式强制清零 xPSR [24] 会触发硬件故障。五、指令英文全称记忆MRSMove to Register from Status从状态寄存器读至通用寄存器MSRMove to Status from Register从通用寄存器写入状态寄存器