42-archive/libftasm/srcs/ft_puts.s
Jack Halford 3efbeb3903 stuff
2017-11-20 17:41:23 +01:00

42 lines
746 B
ArmAsm

global _ft_puts
global ft_puts
extern _ft_strlen
extern _ft_putchar
%define STDOUT 1
section .data
string: db "(null)"
.len: equ $ - string
section .text
_ft_puts: ; int puts(const char *s)
ft_puts:
push rdi ; because strlen will clobber rdi
call _ft_strlen
pop rdi
cmp rax, 0
je print_nl ; if empty string skip printing
print_string:
; int write(int fd, const char *str, size_t size)
mov rsi, rdi ; char *str
mov rdi, STDOUT ; int fd
mov rdx, rax ; size_t strlen
mov rax, WRITE ; WRITE
syscall
cmp rax, 0
jl finish
print_nl:
mov rdi, 0xa
call _ft_putchar
cmp rax, 0
ret
jl finish
success:
mov rax, 0xa ; success returns '\n'
finish:
ret