diff --git a/atoi.asm b/atoi.asm index 7364e7b..1662bc5 100644 --- a/atoi.asm +++ b/atoi.asm @@ -25,6 +25,10 @@ _loop: xor rax, rax mov al, [r9] + cmp rax, 48 + jb _nan + cmp rax, 57 ;if its not a number then return 0 then exit + ja _nan ; push rax sub rax, 48 @@ -43,7 +47,8 @@ _loop: jmp _loop - +_nan: + xor r10 r10 _end: mov rax, r10 diff --git a/atoi_legacy2.asm b/atoi_legacy2.asm new file mode 100644 index 0000000..7364e7b --- /dev/null +++ b/atoi_legacy2.asm @@ -0,0 +1,51 @@ +extern libz_strlen + +global libz_atoi + +section .text + +libz_atoi: + + +; 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] + + +; push rax + sub rax, 48 + mul rcx + add r10, rax +; pop rax + + cmp r9, rdi + je _end + dec r9 +; push rax + mov rax, 10 + mul rcx + mov rcx, rax +; pop rax + + jmp _loop + + + +_end: + mov rax, r10 + ret + diff --git a/example.asm b/example.asm index b451f3a..1528295 100644 --- a/example.asm +++ b/example.asm @@ -7,7 +7,7 @@ extern libz_atoi section .data text2 db "asdasdASDd",0 text db "asdasdasd",0 - text3 dq "65",0 + text3 dq "5",0 textstore dq 0,0 stoer db "0",0 differ db "they differ",0