fix atoi and list_remove_if

This commit is contained in:
2025-08-06 19:15:09 +02:00
parent 49501469c8
commit 2a65c14032
3 changed files with 39 additions and 27 deletions

View File

@ -4,25 +4,25 @@ extern free
section .text
;this function remove an element from a list, set the previous element to the next
; the element ot remove is in rax
; the element to remove is in rax
; the previouse element is in r8
; the pointer to the start of the list is in rdi
remove_element:
push rsi
mov rsi, [rax + 8]
mov rsi, [rax + 8] ; save cur->next in rsi
call call_free_elem
test r8, r8
jz first_elem
jz .first_elem ;if it's the first element, skip setting prev
mov [r8 + 8], rsi
jmp remove_element_end
mov [r8 + 8], rsi ; prev->next = rsi
jmp .remove_element_end
first_elem:
mov [rdi], rsi
.first_elem:
mov [rdi], rsi ;set list start to rsi
remove_element_end:
mov rax, rsi
.remove_element_end:
mov rax, rsi ; set cur element to rsi;
pop rsi
ret
@ -37,7 +37,9 @@ call_free_elem:
push rax
mov rdi, [rax]
call rcx
sub rsp, 8
call rcx ; call remove
add rsp, 8
pop rdi
call free wrt ..plt
@ -76,7 +78,9 @@ loop:
push r8
mov rdi, [rax]
sub rsp, 8
call rdx
add rsp, 8
test eax, eax
pop r8
@ -85,10 +89,12 @@ loop:
pop rsi
pop rdi
jz loop_end
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
loop_end:
@ -98,6 +104,5 @@ loop_end:
mov rax, [rax + 8]
jmp loop
end:
ret