aboutsummaryrefslogtreecommitdiffstats
path: root/asm/jo_c_args.asm
blob: bb240576da6b2ed1995c9e8f93a6fe1aa6472ec5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;                                                                                      ;;
;;  File      : jo_c_args.asm                                             /_________/   ;;
;;  Author    : Joe                                                             |       ;;
;;  Date      : 04/2020                                                         |       ;;
;;  Info      : Check args                                                      |       ;;
;;                                                                      /       |       ;;
;;                                                                      \       /       ;;
;;                                                                       \_____/        ;;
;;                                                                                      ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; jo_c_args(argc: rdi, *argv[]: rsi)
;; ----------------------------------
;; returns 0 if args are invalid
;; returns 1 if args are valid

section .text
	extern strncmp
	global jo_c_args

jo_c_args:
	cmp		rdi, 0x2
	jle		no_args
	mov		rax, [rsi + 0x8 * 0x2]
	cmp		byte [rax + 0x0], 0x0
	je		no_args
	push	rdi
	mov		rdi, [rsi + 0x8 * 0x1]
	push	rsi
	mov		rsi, reference
	mov		rdx, reflen
	call	strncmp
	pop		rsi
	pop		rdi
	cmp		rax, 0x0
	jne		no_args
	mov		rax, 0x1
	retq

no_args:
	xor		rax, rax
	retq

section .data
	reference:	db "--say", 0x0
	reflen:		equ $ - reference