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