37 lines
527 B
ArmAsm
37 lines
527 B
ArmAsm
%define STDOUT 1
|
|
|
|
global _ft_putchar
|
|
global ft_putchar
|
|
|
|
section .data
|
|
string: db "A"
|
|
|
|
section .text
|
|
|
|
; int ft_putchar(int c)
|
|
_ft_putchar:
|
|
ft_putchar:
|
|
; save c value
|
|
push rdi
|
|
|
|
; int write(int fd, char *str, size_t len)
|
|
lea rsi, [rel string] ; char *str
|
|
mov [rsi], dil
|
|
mov rdx, 1 ; size_t len
|
|
mov rdi, STDOUT ; int fd
|
|
mov rax, WRITE
|
|
syscall
|
|
|
|
cmp rax, 0
|
|
jl err
|
|
|
|
; success case then return c
|
|
pop rax
|
|
movzx rax, al ; cast to char
|
|
ret
|
|
|
|
err:
|
|
; error case then return -1
|
|
pop rax
|
|
mov rax, -1
|
|
ret
|