...
This commit is contained in:
@@ -1,31 +1,36 @@
|
||||
global _start
|
||||
extern main, gc_init
|
||||
extern main
|
||||
|
||||
section .text
|
||||
_start:
|
||||
call gc_init
|
||||
call main
|
||||
mov rdi, rax
|
||||
mov rax, 60
|
||||
; Extract argc and argv from the stack
|
||||
mov rdi, [rsp] ; rdi = argc
|
||||
lea rsi, [rsp + 8] ; rsi = argv (pointer to array of strings)
|
||||
|
||||
; Call main(argc, argv)
|
||||
call main ; main returns int in rax
|
||||
|
||||
; Exit with main's return value
|
||||
mov rdi, rax ; exit code
|
||||
mov rax, 60 ; syscall: exit
|
||||
syscall
|
||||
|
||||
global nub_strcmp
|
||||
|
||||
section .text
|
||||
nub_strcmp:
|
||||
xor rdx, rdx
|
||||
xor rdx, rdx
|
||||
.loop:
|
||||
mov al, [rsi + rdx]
|
||||
mov bl, [rdi + rdx]
|
||||
inc rdx
|
||||
cmp al, bl
|
||||
jne .not_equal
|
||||
cmp al, 0
|
||||
je .equal
|
||||
jmp .loop
|
||||
mov al, [rsi + rdx]
|
||||
mov bl, [rdi + rdx]
|
||||
inc rdx
|
||||
cmp al, bl
|
||||
jne .not_equal
|
||||
cmp al, 0
|
||||
je .equal
|
||||
jmp .loop
|
||||
.not_equal:
|
||||
mov rax, 0
|
||||
ret
|
||||
mov rax, 0
|
||||
ret
|
||||
.equal:
|
||||
mov rax, 1
|
||||
ret
|
||||
mov rax, 1
|
||||
ret
|
||||
Reference in New Issue
Block a user