NASM 2 行 db(初始化数据)似乎不起作用

NASM 2 lines of db (initialized data) seemingly not working

我有以下 x86-64 代码,我可以 运行 在 OSX Yosemite:

global _main
extern _exit
extern _puts

DEFAULT REL

section .data

putsmsg:    db      'Puts message...',0
another:    db      0

section .text

_main:
    push        rbp
    mov         rbp, rsp

    ; print a string using PUTS
    lea         rdi, [putsmsg]
    call        _puts

    ; call EXIT(0) c function
    mov         rdi, 0
    call        _exit

我编译,link,和运行如下(来源是a.asm):

nasm -f macho64 a.asm ; gcc a.o -o a.bin ;./a.bin

它不会打印消息 'Puts message...',而如果我只是注释掉包含标签 'another' 的行,它会打印消息。这里出了什么问题?当我有另一条初始化数据行时,为什么它不打印正确的字符串?

使用 yasm 在 GNU/Linux 上为我工作。 (从函数名称中删除 _ 前缀后。)

$ yasm -felf64 puts.asm
$ gcc -o put puts.o
$ ./puts
Puts message...

第二个数据库行仍然存在:

another:    db      0

在过去的几周内,OS X 上的另一个问题几乎完全是这个问题(当字符串后面有更多数据时不打印消息)。该问题的 OP 发现 OS X 上的 yasm 对他有用。 OS X 的 nasm 中可能存在错误?

我最终找到了我正在谈论的post:。请参阅评论中对我的回答的讨论。 OP 发现他的代码可以与 yasm 一起使用,但无法判断 nasm 中是否存在错误,或者他是否只是使用错误。