aboutsummaryrefslogtreecommitdiffstats
path: root/src/x86_64/prelude.asm
diff options
context:
space:
mode:
Diffstat (limited to 'src/x86_64/prelude.asm')
-rw-r--r--src/x86_64/prelude.asm56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/x86_64/prelude.asm b/src/x86_64/prelude.asm
new file mode 100644
index 0000000..788b8e9
--- /dev/null
+++ b/src/x86_64/prelude.asm
@@ -0,0 +1,56 @@
1printdln:
2 sub rsp, 40
3 mov BYTE [rsp+31], 10
4 test rdi, rdi
5 jne .L2
6 mov BYTE [rsp+30], 48
7 mov eax, 30
8 mov r8d, 2
9.L3:
10 lea rsi, [rsp+rax]
11 mov rdx, r8
12 ;; write syscall (Linux)
13 mov rdi, 1
14 mov rax, 1
15 syscall
16 add rsp, 40
17 ret
18.L2:
19 mov r10d, 1
20 js .L12
21.L4:
22 mov r8d, 1
23 lea r9, [rsp+31]
24 mov rsi, -3689348814741910323
25.L5:
26 mov rax, rdi
27 mov rcx, r9
28 mul rsi
29 sub rcx, r8
30 shr rdx, 3
31 lea rax, [rdx+rdx*4]
32 add rax, rax
33 sub rdi, rax
34 mov rax, r8
35 add r8, 1
36 add edi, 48
37 mov BYTE [rcx], dil
38 mov rdi, rdx
39 test rdx, rdx
40 jne .L5
41 cmp r10d, -1
42 jne .L10
43 not r8
44 mov BYTE [rsp+32+r8], 45
45 lea r8, [rax+2]
46.L10:
47 mov eax, 32
48 sub rax, r8
49 jmp .L3
50.L12:
51 neg rdi
52 mov r10d, -1
53 jmp .L4
54
55global _start
56_start: