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