aoc_omni/fasm/lib/print.inc

39 lines
690 B
PHP

include "linux_syscall.inc"
;; rdi contains the address of the null-terminated string to print to STDOUT
print_c_string:
;; initialize counter
mov rax, 0
;; initialize character pointer
mov rbx, rdi
.loop:
;; Is the current character \0?
cmp byte [rbx], 0
;; If so we can print
je .print
;; Otherwise, increment the counter and check the next character
inc rax
inc rbx
jmp .loop
.print:
;; rdi is the start point of the string to print
mov r11, rdi
;; rdx contains the number of characters to print
mov r12, rax
;; Write to STDOUT
write STDOUT, r11, r12
ret
newline db 10, 0
print_newline:
write STDOUT, newline, 1
ret