summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorA404M <ahmadmahmoudiprogrammer@gmail.com>2025-02-03 03:43:59 +0330
committerA404M <ahmadmahmoudiprogrammer@gmail.com>2025-02-03 03:43:59 +0330
commit6b5e8fbb13552ecb78f8e348578861e9409d11f1 (patch)
tree5b3c21efd143497ad6c461874fe482a8ca5551ea
parent5a6f4613ab19a9c4bc9ead53da410d7ab9ff5837 (diff)
Formatting
-rw-r--r--stdlib/main.asm104
1 files changed, 83 insertions, 21 deletions
diff --git a/stdlib/main.asm b/stdlib/main.asm
index efa7ba0..61a6fac 100644
--- a/stdlib/main.asm
+++ b/stdlib/main.asm
@@ -14,37 +14,99 @@ name:
dq value
}
+macro push8 value {
+ sub rsp, 1
+ mov [rsp], value
+}
+
+macro push16 value {
+ mov ax, value
+ push ax
+}
+
+macro push32 value {
+ mov eax, value
+ push eax
+}
+
+macro push64 value {
+ mov rax, value
+ push rax
+}
+
+macro funBegin name {
+ name#^var_size = 0
+}
+
+macro funDefVar name, var_name, size {
+ name#^var_size = name#^var_size + size
+ name#^#var_name#^pos = name#^var_size
+}
+
+macro funEntry name {
+name:
+ if name#^var_size <> 0
+ push rbp
+ mov rbp, rsp
+ sub rsp, name#^var_size
+ end if
+}
+
+macro funEnd name {
+ if name#^var_size <> 0
+ add rsp, name#^var_size
+ pop rbp
+ end if
+ ret
+}
+
+macro funCallBegin id {
+ n^#id#^param_size = 0
+}
+
+macro funCallParam id, value, size {
+ push#size value
+ n^#id#^param_size = n^#id#^param_size + size
+}
+
+macro funCall id, name {
+ call name
+ if n^#id#^param_size <> 0
+ add rsp, n^#id#^param_size
+ end if
+}
+
segment readable executable
entry _start
; rdi = the number
print_u64:
-mov rcx, rsp
-mov rax, rdi
-mov rbx, 10
+ 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
+ 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 rax, SYS_write
+ mov rdi, STDOUT
+ mov rsi, rcx
-mov rdx, rsp
-sub rdx, rcx
+ mov rdx, rsp
+ sub rdx, rcx
-syscall
-ret
+ syscall
+ ret
_start:
-call main
-mov rax, SYS_exit
-xor rdi,rdi
-syscall
+ call main
+ mov rax, SYS_exit
+ xor rdi,rdi
+ syscall