39 lines
690 B
PHP
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
|