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

ARM64汇编程序中指令操作数前符号'='的含义是什么?

ARM64汇编中ldr操作数里=符号的含义与作用

出现在ldr指令操作数里的=是ARM汇编器提供的伪指令标记,带=的ldr本质是 地址加载伪指令,不是CPU原生支持的内存读取指令,具体作用和规则如下:

  • 核心作用:将=后面跟着的符号对应的内存地址加载到目标寄存器,而非加载该符号指向的内存中存储的数值。
    结合你提供的代码举例:
    ldr x1, =var1
    
    这行的作用是把var1这个标签对应的内存地址写入x1寄存器,不是把var1里存的数值1写入x1。后续代码里的ldr x1, [x1]才是根据x1中存储的地址,读取var1的实际数值到x1。你给出的代码里多次用到这个伪指令,都是为了给C标准库函数传地址参数:给scanf传格式串地址、变量存储地址,给printf传输出格式串地址,完全符合这个伪指令的使用场景。
  • 汇编器的处理规则:
    汇编器会自动根据=后面的地址值大小选择最优实现:
    1. 如果地址值符合ARM64mov指令的立即数范围,会直接替换为等效的mov指令,执行效率更高
    2. 如果地址值太大,超出mov立即数的支持范围,汇编器会先把该地址存入代码段附近的文字池(Literal Pool),再把这条伪指令替换为原生的ldr指令,通过PC+偏移的方式从文字池中读取地址到寄存器
  • 和原生ldr指令的区别:
    如果去掉=写为ldr x1, var1,含义完全不同:原生ldr是内存读取操作,会直接把var1指向的内存中存储的数值加载到x1,不需要再做一次解引用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:15:04