使用汇编ADDS指令时出现R3寄存器不存在错误,求助
ARM汇编ADDS指令报错解决
问题根源
- 指令格式误用:你指定的
ADDS DST, S1, S2IMM格式中,S2IMM要求是立即数,但你写的ADDS R3, R1, R2用了寄存器R2作为第三操作数,不符合该格式定义。 - 寄存器访问限制:报错“R3不存在”几乎都是因为当前处于ARM Thumb-1指令集模式,该模式下部分指令仅支持访问R0-R7寄存器,若R3不在当前可用寄存器范围内就会触发错误。
针对性修正方案
场景1:需要使用立即数相加(匹配你给出的格式)
严格遵循S2IMM为立即数的要求,示例代码:
ADDS R3, R1, #0x5 ; R1 + 立即数0x5,结果存入R3
场景2:寄存器R1和R2相加(你的实际需求)
使用寄存器操作数版本的ADDS指令(ARM指令集标准格式ADDS <Rd>, <Rn>, <Rm>),同时解决寄存器访问问题:
- 先切换到支持全寄存器访问的模式(如Thumb-2或ARM模式)
- 编写正确的相加指令
示例代码:
.thumb2 ; 切换到Thumb-2模式,解除R0-R7以外寄存器的访问限制 ADDS R3, R1, R2 ; R1与R2相加,结果存入R3
额外检查点
- 若使用ARM模式,可直接在代码开头添加
.arm指令,无需寄存器范围顾虑 - 确认当前运行环境的特权级别:某些特权模式下会保留特定寄存器,需确保R3为当前模式下的通用可访问寄存器
内容的提问来源于stack exchange,提问作者Leon
相关产品推荐
相关产品推荐

