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

ARM64中ADD指令首选操作码疑问:GAS为何选择移位寄存器版本?

ARM64 add X0, X1, X2 汇编选择的原因分析

首先明确两种匹配的指令类型:

  • add (extended register):属于寄存器扩展类指令,当扩展类型为UXTX且扩展量为0时,语法可简化为add Rd, Rn, Rm。
  • add (shifted register):属于寄存器移位类指令,当移位类型为LSL且移位量为0时,语法也对应add Rd, Rn, Rm。

GAS选择将该指令汇编为add (shifted register)的原因如下:

  • 汇编器内置优先级规则:ARM官方文档虽未明确规定汇编阶段的优先级,但GAS等主流汇编器会优先选择通用核心指令类的编码。移位寄存器类指令是ARM64通用算术运算的基础子集,而扩展寄存器类更多是为配合零扩展、符号扩展等特殊操作设计的,因此当语法重合时,汇编器默认优先匹配核心指令类型。
  • 硬件执行无性能差异:当移位/扩展量为0时,两种指令的硬件执行路径完全等价,不存在执行速度的区别。
  • 与反汇编规则对齐:ARM官方规定的首选反汇编规则中,这类无移位/扩展的指令会被显示为shifted register形式(如add X0, X1, X2),汇编器为保持汇编-反汇编的一致性,会优先生成对应编码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 14:39:54