extern libz_strlen global libz_atoi section .text libz_atoi: mov r8, rdi xor r9, r9 _loopasd23: mov r9b, [r8] cmp r9, 0 ;check and see if we have reached the end of the string jz _exitloopasd12 sub r9, 48 mov [r8], r9b inc r8 jmp _loopasd23 _exitloopasd12: call libz_strlen mov r8, rax mov r11, rax add r8, rdi dec r8 push r8 inc r8 mov rcx, 1 _loop2asd12: dec r8 mov al, [r8] mul rcx mov [r8], al mov rax, rcx mov r10, 10 mul r10 mov rcx, rax cmp r8, rdi je _exitloop2asd12 jmp _loop2asd12 _exitloop2asd12: mov r8, rdi mov r9, rdi inc r9 _loop3asd12: mov r11b, [r9] mov r10b, [r8] cmp r11, 0 jz _endasdasd23123 add r11, r10 mov [r9], r11b mov [r8], r10b inc r8 inc r9 jmp _loop3asd12 _endasdasd23123: pop r8 mov rax, [r8] ret