aboutsummaryrefslogtreecommitdiffstats
path: root/asm/jo_c_args.asm
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--asm/jo_c_args.asm16
1 files changed, 11 insertions, 5 deletions
diff --git a/asm/jo_c_args.asm b/asm/jo_c_args.asm
index c18fbf7..8c91e57 100644
--- a/asm/jo_c_args.asm
+++ b/asm/jo_c_args.asm
@@ -10,24 +10,30 @@
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; returns 0 if args are invalid
+;; returns 1 if args are valid
+
section .text
extern strncmp
global jo_c_args
-jo_c_args: ; jo_c_args(argc: rdi, *argv[]: rdi)
+jo_c_args: ; jo_c_args(argc: rdi, *argv[]: rsi)
cmp rdi, 0x2
jle no_args
+ mov rax, [rsi + 0x8 * 0x2]
+ cmp byte [rax + 0x0], 0x0
+ je no_args
push rdi
- mov rdi, [rsi + 8 * 1]
+ mov rdi, [rsi + 0x8 * 0x1]
push rsi
mov rsi, reference
- mov rdx, len
+ mov rdx, reflen
call strncmp
pop rsi
pop rdi
cmp rax, 0x0
jne no_args
- mov rax, [rsi + 8 * 2]
+ mov rax, 0x1
retq
no_args:
@@ -36,4 +42,4 @@ no_args:
section .data
reference: db "--say", 0x0
- len: equ $ - reference ; reference len
+ reflen: equ $ - reference ; reference len