part 2
This commit is contained in:
parent
bb8e67addf
commit
91ed34f2b1
111
part2/main.asm
111
part2/main.asm
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue