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

ARM中32位寄存器与64位寄存器相加的实现疑问

ARM 64位与32位寄存器相加的实现方法

你遇到的错误是ARMv8 A64指令集的硬性要求导致的:当64位寄存器与32位寄存器执行加法操作时,必须显式指定32位值到64位的扩展方式,不能直接混用。

问题根源

add x24, x24, w25 这条指令中,目标寄存器x24是64位,源操作数w25是32位。A64指令集要求此时必须明确32位值如何扩展为64位——是零扩展(保持无符号)还是符号扩展(保留符号位),因此编译器提示“Missing extend operator at operand 3”。

可行的修改方案

你不需要把两个寄存器都改成64位操作,只需在32位寄存器操作数后添加扩展操作符即可:

mov x24, 5
mov w25, 5
add x24, x24, w25, uxtw  ; 使用零扩展,将w25的32位值扩展为64位(高32位补0)

如果w25存储的是有符号数,就用sxtw(符号扩展,高32位补符号位):

add x24, x24, w25, sxtw

补充说明

虽然执行mov w25, 5后,对应的64位寄存器x25的高32位会被自动清零,但A64的add指令不会默认使用这种扩展方式,必须显式声明扩展操作符才能完成跨位宽的寄存器相加。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 21:31:11