OSX 64位上的NASM问题

时间:2015-06-13 04:02:50

标签: macos assembly 64-bit nasm

我正在学习ASM,我遇到了一个小问题。 我不能在“section.data”中“声明”多个字符串。 我正在尝试这样的事情:

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

它仅适用于存储的最后一个字符串!如果有人知道原因,请告诉我!

1 个答案:

答案 0 :(得分:2)

如果你正在使用nasm 2.11.08,则会有一个问题记录为here与数据部分中的多个条目相关的相对寻址。

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

首先,您可以查看生成的汇编程序代码,以调查其实际生成的内容。这可能是确定的选项,因为您可以确切地看到CPU将运行的内容。

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

相关问题