ASM intel macho64 невозможно распечатать 10 (\n)

Мне нужно сделать функцию puts в сборке intel macho64. Я хотел бы понять, что и почему я не напечатал \n! в моем main.c я звоню дважды, но я получил свой текст без \n

Я компилирую с:

nasm -f macho64 ft_puts.s

Я делаю функцию putstr для печати строки:

%define SYSCALL(nb) 0x2000000 | nb
%define STDOUT  1
%define WRITE   4

section .text
    global  _ft_putstr
    extern  _strlen

_ft_putstr:
    push    rbp
    mov     rbp ,   rsp
    mov     rbx ,   rdi

    cmp     rbx ,   0x0
    je      exit
    mov     rdi ,   rbx

    call    _strlen
    mov     rdx ,   rax
    mov     rdi ,   STDOUT
    mov     rsi ,   rbx
    mov     rax ,   SYSCALL(WRITE)
    syscall

exit:
    leave
    ret

Затем моя функция puts:

%define SYSCALL(nb) 0x2000000 | nb
%define STDOUT  1
%define WRITE   4

section .rodata
    retline  db 10
  nullstr  db "(null)"

section .text
    global  _ft_puts
  extern  _ft_putstr

_ft_puts:
    push    rbp
    mov     rbp ,   rsp
    mov     rbx ,   rdi

    cmp     rbx ,   0x0
    je      null

print:
    mov     rdi ,   rbx
    call    _ft_putstr

print_retline:
  lea   rdi , [rel retline]
    call  _ft_putstr

exit:
    mov rax ,   '10'
    leave
    ret

null:
  lea   rdi , [rel nullstr]
  call  _ft_putstr
  jmp   print_retline

person albttx    schedule 13.10.2015    source источник
comment
Разве ваши строки не должны заканчиваться NUL? Как еще strlen должен найти их длины?   -  person Michael    schedule 14.10.2015
comment
нет, @Michael ничего не меняет, чтобы добавить ноль после моей строки .. и да, strlen - это функция c для получения длины строки (ср.: man strlen) PS: если вы понятия не имеете, пожалуйста, проголосуйте   -  person albttx    schedule 14.10.2015
comment
Возможно, вы столкнулись с известной ошибкой NASM.   -  person Jester    schedule 14.10.2015
comment
@Jester Этот код работает github.com/elieteyssedou/ASM/blob/master/ft_puts .s ! но я хочу понять, почему мой не   -  person albttx    schedule 14.10.2015