zombie-lib/unfinished/hextoi.asm

64 lines
731 B
NASM

extern libz_strlen
global libz_hextoi
section .text
libz_hextoi:
; mov r11, rdi ;saveing it for later
push rdi
call libz_strlen
mov r9, rax
pop rdi
xor r10, r10
mov rcx, 1
add r9, rdi
dec r9
_loop:
xor rax, rax
mov al, [r9]
cmp rax, 48
jb _nan
cmp rax, 70 ;if its not a number then return 0 then exit
ja _nan ;this actually as a bug if you put a : it will be allowed
; push rax
cmp rax, 58 ;if(char < 58){sub char, 48}else{sub char, 55}
jb _charbelow
sub rax, 55
jmp _hexitif
_charbelow:
sub rax, 48
_hexitif:
mul rcx
add r10, rax
; pop rax
cmp r9, rdi
je _end
dec r9
; push rax
mov rax, 16
mul rcx
mov rcx, rax
; pop rax
jmp _loop
_nan:
xor r10, r10
_end:
mov rax, r10
ret