aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJozanLeClerc <bousset.rudy@gmail.com>2020-04-17 19:35:12 +0200
committerJozanLeClerc <bousset.rudy@gmail.com>2020-04-17 19:35:12 +0200
commit96caf953fb9d851b2f949fcd52dd7194ee6b1bb2 (patch)
tree79e491bab9e767be9fb738da0df1abc0ee0372d1
parentin progress (diff)
downloadlowbat-bsd-96caf953fb9d851b2f949fcd52dd7194ee6b1bb2.tar.gz
lowbat-bsd-96caf953fb9d851b2f949fcd52dd7194ee6b1bb2.tar.bz2
lowbat-bsd-96caf953fb9d851b2f949fcd52dd7194ee6b1bb2.tar.xz
lowbat-bsd-96caf953fb9d851b2f949fcd52dd7194ee6b1bb2.tar.zst
lowbat-bsd-96caf953fb9d851b2f949fcd52dd7194ee6b1bb2.zip
On the way, solved segv
-rw-r--r--asm/jo_c_args.asm16
-rw-r--r--asm/jo_r_loop.asm10
-rw-r--r--asm/jo_r_lowbat.asm22
3 files changed, 23 insertions, 25 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
diff --git a/asm/jo_r_loop.asm b/asm/jo_r_loop.asm
index 02753f5..736b3a6 100644
--- a/asm/jo_r_loop.asm
+++ b/asm/jo_r_loop.asm
@@ -11,7 +11,17 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
section .text
+ extern jo_n_speak
global jo_r_loop
jo_r_loop:
+ cmp rdi, 0x1
+ je speak1
+
+next:
retq
+
+speak1:
+ mov rdi, [rsi + 8 * 2]
+ call jo_n_speak
+ jmp next
diff --git a/asm/jo_r_lowbat.asm b/asm/jo_r_lowbat.asm
index 6fadc86..53d56fa 100644
--- a/asm/jo_r_lowbat.asm
+++ b/asm/jo_r_lowbat.asm
@@ -18,30 +18,12 @@
;; c: check
section .text
- extern puts
- ;; extern stoa
extern jo_c_args
extern jo_r_loop
global jo_r_lowbat
jo_r_lowbat:
- ;; call stoa
- push rdi
+ call jo_c_args
mov rdi, rax
- call puts
- pop rdi
+ call jo_r_loop ; jo_r_loop(speak: 0-1, *argv[])
retq
-
-;; call jo_c_args
-;; mov bl, byte [rax + 0x0]
-;; cmp bl, 0x0
-;; jne joprint
-;; call jo_r_loop ; jo_r_loop(speak: 0-1, *argv[])
-;; xor rax, rax
-;; retq
-
-;; joprint:
-;; push rdi
-;; mov rdi, rax
-;; call puts
-;; pop rdi