Мне нужно сделать функцию 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
strlen
должен найти их длины? - person Michael   schedule 14.10.2015