ASM intel macho64无法打印10(\ n)

时间:2015-10-13 21:21:02

标签: assembly nasm intel

我必须在程序集intel macho64中创建一个puts函数 我想了解什么以及为什么我没有打印\ 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

然后我的put函数:

%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

0 个答案:

没有答案