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

如何在GNU ARM汇编语法中使用移位操作数?

GNU ARM汇编中等价于UAL移位MOV的写法

你遇到的问题是因为GNU汇编器(gas)的语法和ARM官方的统一汇编语言(UAL)在移位操作的格式上有差异:UAL允许用逗号分隔第三个操作数来指定移位,而GAS不支持这种写法,需要把移位操作直接附加在源寄存器后面,作为源操作数的一部分。

正确的直接写法

针对你使用的ARMv8 32位寄存器,正确的GNU语法应该是:

mov w0, w1 lsl 2

部分场景下也兼容带立即数前缀#的写法:

mov w0, w1 lsl #2

分步替代写法

如果需要更明确的分步逻辑,也可以先对源寄存器执行移位,再将结果赋值给目标寄存器:

lsl w1, w1, 2
mov w0, w1

不过这种写法会多一条指令,效率不如直接在mov中嵌入移位操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 04:27:01