summaryrefslogtreecommitdiff
path: root/pasmgen-linux.asm
diff options
context:
space:
mode:
Diffstat (limited to 'pasmgen-linux.asm')
-rw-r--r--pasmgen-linux.asm75
1 files changed, 75 insertions, 0 deletions
diff --git a/pasmgen-linux.asm b/pasmgen-linux.asm
new file mode 100644
index 0000000..56113e6
--- /dev/null
+++ b/pasmgen-linux.asm
@@ -0,0 +1,75 @@
+format ELF64 executable
+
+segment readable executable
+
+main:
+ ;; No arg preload case
+ cmp [rsp], word 1
+ jne argparse
+
+ mov r8, qword 3
+ mov r9, qword 2
+ mov r10, qword 3
+
+ jmp generate
+
+argparse:
+ ;; Check args (need 3)
+ cmp [rsp], word 3
+ jle fail
+
+ ;; load arg1
+ mov r8, [rsp+16]
+ mov r8, [r8]
+ and r8, 0xFF
+ sub r8, 48
+
+ ;; load arg2
+ mov r9, [rsp+24]
+ mov r9, [r9]
+ and r9, 0xFF
+ sub r9, 48
+
+ ;; load arg3
+ mov r10, [rsp+32]
+ mov r10, [r10]
+ and r10, 0xFF
+ sub r10, 48
+
+ jmp generate
+
+ok:
+ ;; Write
+ mov rdi, 1 ;; stdout
+ mov rdx, rsi
+ mov rsi, out_buf
+ mov rax, 0x01
+ syscall
+
+ ;; Exit (code 0)
+ mov rdi, 0
+ mov rax, 0x3c
+ syscall
+
+fail:
+ ;; Write
+ mov rdi, 1 ;; stdout
+ mov rsi, usage
+ mov rdx, usage_len
+ mov rax, 0x01
+ syscall
+
+ ;; Exit 1
+ mov rdi, 1
+ mov rax, 0x3c
+ syscall
+
+
+include 'pasmgen.inc'
+
+
+segment readable writeable
+
+include 'constants.inc'
+
+out_buf rb 64