33 lines
392 B
ArmAsm
33 lines
392 B
ArmAsm
%define STDOUT 1
|
|
|
|
global _ft_putchar
|
|
global ft_putchar
|
|
|
|
section .bss
|
|
char: resb 1
|
|
|
|
section .text
|
|
|
|
; int ft_putchar(int c)
|
|
_ft_putchar:
|
|
ft_putchar:
|
|
; save c value
|
|
push rdi
|
|
|
|
; write(STDOUT, char, 1)
|
|
mov rdi, STDOUT
|
|
lea rsi, [rdi]
|
|
mov rdx, 1
|
|
mov rax, WRITE
|
|
syscall
|
|
|
|
cmp rax, 0
|
|
jle err
|
|
; success case then return c
|
|
pop rax
|
|
ret
|
|
|
|
err:
|
|
; error case then return -1
|
|
mov rax, -1
|
|
ret
|