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

关于Aarch64架构CPSR寄存器的困惑:读取与处理器模式编码问题

问题解答

关于WinDbg中CPSR M位编码的困惑

AArch64架构已经摒弃了ARMv7时代的处理器模式划分,转而采用异常级别(Exception Level, EL)区分特权等级。你看到的M位0b00100(对应0x4),在AArch64语境下并非未定义,而是对应EL1(异常级别1)——这正是Windows 11内核运行的特权等级。

WinDbg沿用了ARMv7时代的CPSR位域标注方式,但实际AArch64中,原M位的编码已被重新定义为异常级别相关状态:0x4对应EL1,且当前使用EL1专属栈(SP_EL1)。内核模式下触发中断时,CPU仍处于EL1的异常处理流程,因此cpsr和spsr都会显示这个值,完全符合Windows内核的运行状态。

关于mrs x0, CPSR编译错误的原因

AArch64架构中不存在CPSR这个系统寄存器名称——这是ARMv7时代的寄存器命名。在AArch64汇编里,原CPSR的功能被拆分到多个专用系统寄存器中:

  • 读取异常级别:使用mrs x0, CurrentEL
  • 读取标志位(N/Z/C/V):使用mrs x0, NZCV
  • 读取中断掩码(D/A/I/F):使用mrs x0, DAIF

你遇到的error A2502: operand 2: Expected constant错误,是因为汇编器(如MASM)在AArch64模式下无法识别CPSR作为合法的系统寄存器操作数,因此判定第二个操作数不符合要求。替换为AArch64对应的系统寄存器名称即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 06:04:55