【问题标题】:Difference between two different variable declarations in asmasm中两个不同变量声明的区别
【发布时间】:2020-09-13 03:31:55
【问题描述】:

下面的gas 程序集有什么区别?

x: .long 500

还有:

x = 500

两者可以互换使用,如果不能,为什么一个比另一个更受欢迎?

【问题讨论】:

    标签: assembly x86 gnu-assembler


    【解决方案1】:

    它们不可互换。第一个:

        x:    .long 500
    

    在内存中创建一个用给定值初始化的 4 字节空间。标签x 表示该内存位置的地址。

    第二个:

        x = 500
    

    不创建任何内存。它将符号 x 设置为值 500,而不是地址。

    【讨论】:

    • 谢谢,标签/值是如何“存储”它们的?它不是必须以一种或另一种方式进入记忆吗?
    • 符号值(第一种情况下的标签地址)只存储在汇编符号表中。它不存储在正在生成的程序中。当在指令中使用符号时,汇编器使用符号值来生成指令。
    • @carl.hiass:请注意,x = 500 不会出现在汇编器对象输出的“符号表”中。最好将其视为“组装时间常数”。从技术上讲,我认为 GAS 术语仍然称其为符号,但它与标签创建的符号不同。无论如何,您可以将它用于add $x, %eax 之类的东西,而不是在多个地方硬编码相同的数字。
    • @Peter,用“=”创建的符号确实出现在符号表中,并且可以使用 .global 指令将它们设为全局。
    猜你喜欢
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 2016-11-05
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    相关资源
    最近更新 更多