summaryrefslogtreecommitdiff
path: root/stdlib
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib')
-rw-r--r--stdlib/main.asm39
1 files changed, 39 insertions, 0 deletions
diff --git a/stdlib/main.asm b/stdlib/main.asm
new file mode 100644
index 0000000..bd3d417
--- /dev/null
+++ b/stdlib/main.asm
@@ -0,0 +1,39 @@
+format ELF64 executable 3
+
+SYS_exit = 60
+SYS_write = 1
+STDOUT = 1
+
+segment readable executable
+entry _start
+
+; rdi = the number
+print_u64:
+mov rcx, rsp
+mov rax, rdi
+mov rbx, 10
+
+.L:
+xor rdx, rdx
+div rbx
+add dl, '0'
+dec rcx
+mov [rcx],dl
+cmp rax, 0
+jnz .L
+
+mov rax, SYS_write
+mov rdi, STDOUT
+mov rsi, rcx
+
+mov rdx, rsp
+sub rdx, rcx
+
+syscall
+ret
+
+_start:
+call main
+mov rax, SYS_exit
+xor rdi,rdi
+syscall