Compare commits

..

2 commits

Author SHA1 Message Date
e40f7dbe2b idk what i changed check the diffs 2021-11-25 12:41:37 -05:00
bba6630833 i (hopefully) made atoi return 0 if its not a number
@quantum fix
i should probably make it more complient with the spec
2021-11-21 03:21:48 -05:00
5 changed files with 123 additions and 3 deletions

View file

@ -18,6 +18,6 @@ add_compile_options(-g)
add_link_options(-fno-pie -m64 -no-pie -pedantic-errors) add_link_options(-fno-pie -m64 -no-pie -pedantic-errors)
#Make a EXE with cpp and asm files #Make a EXE with cpp and asm files
add_library(z tolower.asm strlen.asm strcmp.asm atoi.asm) add_library(z tolower.asm strlen.asm strcmp.asm atoi.asm hextoi.asm)
add_executable(example example.asm) add_executable(example example.asm)
target_link_libraries(example z) target_link_libraries(example z)

View file

@ -25,6 +25,10 @@ _loop:
xor rax, rax xor rax, rax
mov al, [r9] 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 ; push rax
sub rax, 48 sub rax, 48
@ -43,7 +47,8 @@ _loop:
jmp _loop jmp _loop
_nan:
xor r10, r10
_end: _end:
mov rax, r10 mov rax, r10

51
atoi_legacy2.asm Normal file
View file

@ -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

View file

@ -7,7 +7,7 @@ extern libz_atoi
section .data section .data
text2 db "asdasdASDd",0 text2 db "asdasdASDd",0
text db "asdasdasd",0 text db "asdasdasd",0
text3 dq "65",0 text3 dq "5",0
textstore dq 0,0 textstore dq 0,0
stoer db "0",0 stoer db "0",0
differ db "they differ",0 differ db "they differ",0

64
unfinished/hextoi.asm Normal file
View file

@ -0,0 +1,64 @@
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