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

