This commit is contained in:
Benoit T 2024-12-14 20:27:37 +01:00
parent bb8e67addf
commit 91ed34f2b1
1 changed files with 45 additions and 66 deletions

View File

@ -94,57 +94,48 @@ readval:
;; end of readval1 ;; end of readval1
popmin: countnum:
;; rdi: value to count
;; rsi: list address
push rbp push rbp
mov rbp, rsp mov rbp, rsp
sub rsp, 22H sub rsp, 18H
;; 8H, 0 -> min value address ;; 4H, 0H -> value
;; 12H, 8H -> min value ;; 8H, 4H -> counter
;; 14H, 12H -> loop counter ;; 10H, 8H -> loop counter
;; 22H, 14H : current address ;; 18H, 10H : current address
;; rdi: list effective address mov dword [rbp-4H], edi
mov qword [rbp-8H], rdi mov qword [rbp-18H], rsi ; current address
mov qword [rbp-22H], rdi ; current address mov dword [rbp-8H], 0
mov esi, [rdi]
mov dword [rbp-12H], esi
mov ecx, 1000 mov ecx, 1000
minloop: countloop:
mov word [rbp-14H], cx mov word [rbp-10H], cx
mov r9, qword [rbp-22H] mov r9, qword [rbp-18H]
mov edi, [r9] ; current value mov eax, [r9] ; curret number
mov esi, dword [rbp-12H] ; min value mov ebx, [rbp-4H] ; value to count
cmp esi, 0 cmp eax, ebx
je updatemin jne next
cmp edi, 0 mov eax, [rbp-8H]
je next ; skip zeroes inc eax
mov [rbp-8H], eax
cmp edi, esi
jle updatemin
jmp next
updatemin:
mov r9, qword [rbp-22H]
mov dword [rbp-12H], edi
mov qword [rbp-8H], r9
next: next:
mov r9, qword [rbp-22H] ;; go to next number
mov r9, qword [rbp-18H]
add r9, 4H add r9, 4H
mov qword [rbp-22H], r9 mov qword [rbp-18H], r9
mov cx, [rbp-10H]
dec cx dec cx
jnz minloop jnz countloop
mov rax, qword [rbp-8H] mov eax, dword [rbp-8H]
mov dword [rax], 0H
mov eax, dword [rbp-12H]
mov rsp, rbp mov rsp, rbp
pop rbp pop rbp
@ -243,58 +234,46 @@ loop0:
jnz loop0 jnz loop0
mov qword [rbp-42H], 0 ; sum = 0 mov qword [rbp-42H], 0 ; sum = 0
lea rax, [rbp-2000H]
mov qword [rbp-50H], rax
mov ecx, 1000 mov ecx, 1000
sumloop: sumloop:
mov word [rbp-19H], cx mov word [rbp-19H], cx
;; 50H - 46H : min1 ;; 50H - 44H : actual address
;; 46H - 42H : min2 ;; 42H - 38H : sum
;; 42H - 34H : sum
lea rdi, [rbp-2000H] mov rdi, qword [rbp-50H]
call popmin mov rdi, [rdi]
mov dword [rbp-50H], eax
lea rdi, [rbp-1000H] lea rsi, [rbp-1000H]
call popmin call countnum
mov dword [rbp-46H], eax
xor rax, rax mov rbx, qword [rbp-50H]
mov eax, dword [rbp-50H] mov ebx, [rbx]
mov ebx, dword [rbp-46H] mul ebx
cmp eax, ebx mov ebx, [rbp-42H]
jge a add ebx, eax
jmp b mov [rbp-42H], ebx
a: ;; go to next number
sub eax, ebx mov r9, qword [rbp-50H]
jmp sum add r9, 4H
mov qword [rbp-50H], r9
b:
sub ebx, eax
mov eax, ebx
jmp sum
sum:
mov rbx, qword [rbp-42H]
add rbx, rax
mov qword [rbp-42H], rbx
mov cx, word [rbp-19H] mov cx, word [rbp-19H]
dec cx dec cx
cmp cx, 0 cmp cx, 0
jnz sumloop jnz sumloop
;; print sys_close result ;; print sys_close result
lea rdi, [nbr_str] lea rdi, [nbr_str]
mov rsi, qword [rbp-42H] mov rsi, qword [rbp-42H]
call printvalue call printvalue
close_file: close_file:
;; sys_close ;; sys_close
mov rax, 3 ; sys_close mov rax, 3 ; sys_close