Трябва да направя функция puts в сборка intel macho64 Бих искал да разбера какво и защо не отпечатах \n ! в моя main.c извиквам puts два пъти, но получих текста си без \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