NASM 关于 OSX 64 位的问题

NASM issue on OSX 64-bit

我正在学习 ASM,但遇到了一个小问题。 在 "section.data" 中我不能 "declare" 超过一个字符串。 我正在尝试这样的事情:

section .data
    string1 db "test1 ", 0;
    string2 db "test2 ", 0;
section .text
    global _test
    extern _puts
    _test:
         lea rdi, [rel string1]
         call _puts
         lea rdi, [rel string2]
         call _puts
         ret

这个函数应该在 STDOUT 上打印 "test1 test2 ",但它不起作用。 结果是:

test2

它只对最后存储的字符串有效!如果有人知道为什么,请告诉我!

如果您使用的是 nasm 2.11.08,则记录了一个问题 here 与相对寻址结合数据部分中的多个条目有关。

你可以做两件事中的一件(或两件)来确定。

首先,您可以查看生成的汇编代码以调查它实际上 生成的内容。这可能是最终的选择,因为您可以准确地看到 CPU 将是什么 运行。

其次,您可以使用 nasm 早期 版本测试您的代码,看看问题是否消失。如果是这样,则间接证明是 2.11.08 中的错误导致了您的问题。