【发布时间】:2020-09-13 03:31:55
【问题描述】:
下面的gas 程序集有什么区别?
x: .long 500
还有:
x = 500
两者可以互换使用,如果不能,为什么一个比另一个更受欢迎?
【问题讨论】:
标签: assembly x86 gnu-assembler
下面的gas 程序集有什么区别?
x: .long 500
还有:
x = 500
两者可以互换使用,如果不能,为什么一个比另一个更受欢迎?
【问题讨论】:
标签: assembly x86 gnu-assembler
它们不可互换。第一个:
x: .long 500
在内存中创建一个用给定值初始化的 4 字节空间。标签x 表示该内存位置的地址。
第二个:
x = 500
不创建任何内存。它将符号 x 设置为值 500,而不是地址。
【讨论】:
x = 500 不会出现在汇编器对象输出的“符号表”中。最好将其视为“组装时间常数”。从技术上讲,我认为 GAS 术语仍然称其为符号,但它与标签创建的符号不同。无论如何,您可以将它用于add $x, %eax 之类的东西,而不是在多个地方硬编码相同的数字。