diff --git a/srcs/bonus/ft_atoi_base.s b/srcs/bonus/ft_atoi_base.s index 460ab9e..10b7a57 100644 --- a/srcs/bonus/ft_atoi_base.s +++ b/srcs/bonus/ft_atoi_base.s @@ -29,7 +29,7 @@ get_char_index: lea rsi, [rsi + 1] jne .get_char_index_loop -.error +.error: mov rax, -1 ;not found and at the end pop rsi ret @@ -47,7 +47,7 @@ check_duplicate_char: mov al ,[rdi] ; test if \0 test al, al - jz no_duplicate + jz .no_duplicate push rdi mov rsi, rdi @@ -62,7 +62,7 @@ check_duplicate_char: mov rax, 1 ret -no_duplicate: +.no_duplicate: xor rax, rax ret @@ -76,25 +76,24 @@ check_base: mov al, [rdi] ; check if it's an empty string test al, al - jne chk_bs_duplicate + jne .chk_bs_duplicate xor rax, rax ret -chk_bs_duplicate: +.chk_bs_duplicate: push rdi call check_duplicate_char pop rdi test rax, rax - jz chk_bs_char + jz .chk_bs_char xor rax, rax ret - -chk_bs_char: +.chk_bs_char: mov al, [rdi] ; if rdi is \0, return 0 test al, al - jz base_ok + jz .base_ok push rdi ; if current char is in invalid_chars mov dil, [rdi]; @@ -104,12 +103,12 @@ chk_bs_char: cmp rax, -1 ; if not -1, error lea rdi, [rdi + 1] - jz chk_bs_char + jz .chk_bs_char xor rax, rax; return 0 ret -base_ok: +.base_ok: mov rax,1 ret @@ -120,50 +119,54 @@ base_ok: ft_atoi_base: xor rax, rax ;check if there is a null pointer in rdi or rsi test rdi, rdi - jz return + jz .return test rsi, rsi - jz return + jz .return push rdi ; is base valid push rsi mov rdi, rsi + sub rsp, 8 call check_base + add rsp, 8 pop rsi pop rdi test rax, rax - jne whitespace_skip ; if 0 , base is not valid + jne .whitespace_skip ; if 0 , base is not valid ret -whitespace_skip_inc: +.whitespace_skip_inc: lea rdi, [rdi + 1] -whitespace_skip: +.whitespace_skip: push rdi push rsi mov dil, [rdi] lea rsi, [rel whitespaces] + sub rsp, 8 call get_char_index + add rsp, 8 pop rsi pop rdi cmp rax, 0 - jge whitespace_skip_inc + jge .whitespace_skip_inc xor rdx, rdx - jmp plus_minus + jmp .plus_minus -plus_minus_invert: +.plus_minus_invert: xor rdx, 1 -plus_minus_inc: +.plus_minus_inc: lea rdi, [rdi + 1] -plus_minus: +.plus_minus: mov al, [rdi] cmp al, '-' - jz plus_minus_invert + jz .plus_minus_invert cmp al, '+' - jz plus_minus_inc + jz .plus_minus_inc push rdx ; keep invert sign setting in stack @@ -179,16 +182,18 @@ plus_minus: xor rax, rax -number_loop: +.number_loop: mov dl, [rdi] test dl, dl - jz final_number + jz .final_number push rax push rdi push rsi mov dil, dl + sub rsp, 8 call get_char_index + add rsp, 8 pop rsi pop rdi @@ -196,7 +201,7 @@ number_loop: pop rax cmp rdx, -1 ; if the char is not in the base, return the number - jz final_number + jz .final_number push rdx ; imul sets rdx to 0 imul rbx @@ -205,15 +210,15 @@ number_loop: lea rdi, [rdi + 1] - jmp number_loop + jmp .number_loop -final_number: +.final_number: pop rdx test rdx, rdx - jne neg_final_number + jne .neg_final_number ret -neg_final_number: +.neg_final_number: neg rax -return: +.return: ret diff --git a/srcs/bonus/ft_list_push_front.s b/srcs/bonus/ft_list_push_front.s index b9579ed..4d68e2f 100644 --- a/srcs/bonus/ft_list_push_front.s +++ b/srcs/bonus/ft_list_push_front.s @@ -5,19 +5,19 @@ section .text ft_list_push_front: test rdi, rdi - jz err + jz .err push rdi push rsi - sub rsp, 8 mov rdi, 16 + sub rsp, 8 call malloc wrt ..plt add rsp, 8 pop rsi pop rdi test rax, rax ; did malloc return 0 - jz err + jz .err push rdi mov rdi, [rdi] @@ -27,5 +27,5 @@ ft_list_push_front: mov [rdi], rax -err: +.err: ret diff --git a/srcs/bonus/ft_list_remove_if.s b/srcs/bonus/ft_list_remove_if.s index 10ba558..760e043 100644 --- a/srcs/bonus/ft_list_remove_if.s +++ b/srcs/bonus/ft_list_remove_if.s @@ -57,18 +57,18 @@ call_free_elem: ft_list_remove_if: test rdi, rdi - jz end + jz .end test rdx, rdx - jz end + jz .end test rcx, rcx - jz end + jz .end xor r8, r8 mov rax, [rdi] -loop: +.loop: test rax, rax - jz end + jz .end push rax push rdi @@ -89,20 +89,20 @@ loop: pop rsi pop rdi - jnz loop_end ;if call to rdx returned zero, don't remove + jnz .loop_end ;if call to rdx returned zero, don't remove pop rax sub rsp, 8 call remove_element add rsp, 8 - jmp loop + jmp .loop -loop_end: +.loop_end: pop rax mov r8, rax mov rax, [rax + 8] - jmp loop + jmp .loop -end: +.end: ret diff --git a/srcs/bonus/ft_list_size.s b/srcs/bonus/ft_list_size.s index e5fd58f..f5e3b60 100644 --- a/srcs/bonus/ft_list_size.s +++ b/srcs/bonus/ft_list_size.s @@ -5,15 +5,14 @@ section .text ft_list_size: xor rax, rax -count_start: +.count_start: test rdi, rdi - jz end + jz .end mov rdi, [rdi + 8] + inc rax - lea rax, [rax + 1] + jmp .count_start - jmp count_start - -end: +.end: ret diff --git a/srcs/bonus/ft_list_sort.s b/srcs/bonus/ft_list_sort.s index 9726d88..d5e3688 100644 --- a/srcs/bonus/ft_list_sort.s +++ b/srcs/bonus/ft_list_sort.s @@ -19,37 +19,37 @@ list_swap: ft_list_sort: test rdi, rdi - jz err + jz .err test rsi, rsi - jz err + jz .err mov rdi, [rdi] push rdi call ft_list_size pop rdi -loop: +.loop: test rax, rax - jz err + jz .err push rax push rdi push rsi mov rax, rsi ; move cmp to rax - jmp loop2 + jmp .loop2 -loop2_inc: +.loop2_inc: mov rdi, [rdi + 8] -loop2: +.loop2: test rdi, rdi - jz loop2_end + jz .loop2_end mov rsi, [rdi + 8] test rsi, rsi - jz loop2_end + jz .loop2_end push rdi mov rdi, [rdi] @@ -61,24 +61,23 @@ loop2: cmp eax, 0 pop rax pop rdi - jle loop2_inc + jle .loop2_inc ; then call list_swap mov rsi, [rdi + 8] push rax + sub rsp, 8 call list_swap + add rsp, 8 pop rax - jmp loop2_inc + jmp .loop2_inc - - -loop2_end: +.loop2_end: pop rsi pop rdi pop rax lea rax, [rax - 1] - jmp loop + jmp .loop - -err: +.err: ret diff --git a/srcs/ft_read.s b/srcs/ft_read.s index f014cd1..54e1f22 100644 --- a/srcs/ft_read.s +++ b/srcs/ft_read.s @@ -7,13 +7,15 @@ ft_read: syscall cmp rax, 0 ; if return is < 0, it's an error in negative - jge success + jge .success neg rax ; inv errno, and set errno mov edi, eax + sub rsp, 8 call __errno_location wrt ..plt + add rsp, 8 mov [rax], edi mov rax, -1 -success: +.success: ret diff --git a/srcs/ft_strcmp.s b/srcs/ft_strcmp.s index baa879d..1d029b7 100644 --- a/srcs/ft_strcmp.s +++ b/srcs/ft_strcmp.s @@ -5,44 +5,43 @@ ft_strcmp: xor rax, rax test rdi, rdi ; test if args are false - jz err + jz .err test rsi, rsi - jz err -loop_start: + jz .err +.loop_start: mov al, [rdi] cmp al, [rsi] - jne compare + jne .compare test al, al ; test if rdi is \0 - jz compare + jz .compare mov al, [rsi] ; test if rsi is \0 test al, al - jz compare + jz .compare lea rsi, [rsi + 1] lea rdi, [rdi + 1] - jmp loop_start + jmp .loop_start -compare: +.compare: mov al, [rdi] cmp al, [rsi] - jl lower - jg greater + jl .lower + jg .greater mov eax, 0 - jmp end + jmp .end -lower: +.lower: mov eax, -1 - jmp end + jmp .end -greater: +.greater: mov eax, 1 - jmp end + jmp .end -err: +.err: mov eax, 0 - -end: +.end: ret diff --git a/srcs/ft_strcpy.s b/srcs/ft_strcpy.s index 5a41c56..7b0d243 100644 --- a/srcs/ft_strcpy.s +++ b/srcs/ft_strcpy.s @@ -3,25 +3,25 @@ section .text ft_strcpy: test rdi, rdi - jz err + jz .err test rsi, rsi - jz err + jz .err push rdi -loop_start: +.loop_start: mov al, [rsi] mov [rdi],al lea rdi, [rdi + 1] lea rsi, [rsi + 1] test al, al - jne loop_start + jne .loop_start -end: +.end: pop rax ret -err: +.err: xor rax, rax ret diff --git a/srcs/ft_strdup.s b/srcs/ft_strdup.s index 90fe4a6..e579e28 100644 --- a/srcs/ft_strdup.s +++ b/srcs/ft_strdup.s @@ -1,5 +1,6 @@ -extern malloc global ft_strdup + +extern malloc extern ft_strcpy extern ft_strlen extern __errno_location @@ -7,7 +8,7 @@ section .text ft_strdup: test rdi, rdi ; test if arg is NULL - jz err + jz .err push rdi ;push to use it for the strcpy call ft_strlen @@ -16,17 +17,21 @@ ft_strdup: call malloc wrt ..plt test rax, rax - jz malloc_failed + jz .malloc_failed mov rdi, rax pop rsi + sub rsp, 8 call ft_strcpy + add rsp, 8 ret -malloc_failed: +.malloc_failed: + sub rsp, 8 call __errno_location wrt ..plt + add rsp, 8 mov dword [rax], 12 pop rax -err: +.err: xor rax, rax ret diff --git a/srcs/ft_strlen.s b/srcs/ft_strlen.s index 56a7bcb..61e1f62 100644 --- a/srcs/ft_strlen.s +++ b/srcs/ft_strlen.s @@ -3,22 +3,22 @@ section .text ft_strlen: test rdi, rdi - jz err + jz .err mov rsi, rdi - jmp loop_start + jmp .loop_start -increase_pointer: +.increase_pointer: lea rsi, [rsi + 1] -loop_start: +.loop_start: mov al, [rsi] test al, al - jnz increase_pointer -end: + jnz .increase_pointer +.end: sub rsi, rdi mov rax, rsi ret -err: +.err: xor rax, rax ret diff --git a/srcs/ft_write.s b/srcs/ft_write.s index 91c7f11..49ca715 100644 --- a/srcs/ft_write.s +++ b/srcs/ft_write.s @@ -7,14 +7,16 @@ ft_write: syscall cmp rax, 0 ; if return is < 0, it's an error in negative - jge success + jge .success neg rax ; inv errno, and set errno mov edi, eax + sub rsp, 8 call __errno_location wrt ..plt + add rsp, 8 mov [rax], edi mov rax, -1 -success: +.success: ret