是否可以使用NASM中另一个标签的内容定义标签?

时间:2014-12-18 08:15:10

标签: macos assembly label nasm x86-64

请考虑以下代码:

    section .data
bar:        db 'bar'        ; label bar
foo_bar:    db 'foo', bar   ; label foo_bar

以上代码在Mac OS X下使用NADM进行组装时会出现以下错误:

error: Mach-O 64-bit format does not support 32-bit absolute addresses

我知道标签指的是内存中的一些绝对地址,这是否意味着我需要计算bar的绝对64位地址?或者我应该计算吧的相对地址?这里出了什么问题?或者如果我使用了错误的方法,那么两个如何使用另一个标签的内容创建标签。

我在Mac OS X 10.10上。我有一个核心i5 m540 Intel CPU。我使用NASM版本2.11.06。

1 个答案:

答案 0 :(得分:0)

从问题陈述"使用其他标签的内容创建标签"从您的示例中,看起来您正在尝试组合字符串。如果您正在尝试这样做,可以按照以下方式完成:

foo_bar: db 'foo'
bar:     db 'bar'

请注意订购,这很重要。标签只是地址参考。因此,上述声明将在某个位置分配字符串'foobar'并将其标记为foo_bar。 您可以在"foobar"位置评估foo_bar,仅在位置'bar'评估bar

在您的示例中,您没有使用任何类型的字符串终止符(例如0x0,' $'等)。所以这应该适用于O.K。'。但很可能你也想要使用各个部分。在这种情况下,将需要用于区分字符串的附加信息(例如要读取的字符数,某些分隔符等)。

希望,这可以解决您的问题。如果您需要任何澄清,或者您认为我误解了您的问题,请提供其他信息。