extern scanf
extern printf
extern malloc
extern free
section .data
fd db "%d", 0
fout db "%d", 0
fc db "%c", 0
section .bss
n resd 1
d resd 1
val resd 1
cur resd 1
best resd 1
bestn resd 1
i resd 1
j resd 1
t resd 1
slo resd 1
shi resd 1
blo resd 1
bhi resd 1
section .text
global main
main:
push ebp
mov ebp, esp
push ebx
push esi
push edi
and esp, -16
mov dword [best], 0
mov dword [bestn], 0
mov dword [blo], 0
mov dword [bhi], 80000000h
sub esp, 8
push n
push fd
call scanf
add esp, 16
x1:
cmp dword [n], 0
je print
sub esp, 8
push d
push fd
call scanf
add esp, 16
mov eax, [d]
imul eax, [d]
shl eax, 2
sub esp, 12
push eax
call malloc
add esp, 16
mov [cur], eax
mov dword [slo], 0
mov dword [shi], 0
mov dword [i], 0
x2:
mov eax, [i]
cmp eax, [d]
jge x8
mov dword [j], 0
x3:
mov eax, [j]
cmp eax, [d]
jge x7
sub esp, 8
push val
push fd
call scanf
add esp, 16
mov eax, [i]
imul eax, [d]
add eax, [j]
mov [t], eax
mov ebx, [cur]
mov ecx, [t]
mov eax, [val]
mov [ebx + ecx * 4], eax
mov eax, [i]
cmp eax, [j]
jne x6
mov eax, [val]
cdq
add [slo], eax
adc [shi], edx
x6:
inc dword [j]
jmp x3
x7:
inc dword [i]
jmp x2
x8:
mov eax, [shi]
cmp eax, [bhi]
jg x9
jl x10
mov eax, [slo]
cmp eax, [blo]
jbe x10
x9:
cmp dword [best], 0
je x11
sub esp, 12
push dword [best]
call free
add esp, 16
x11:
mov eax, [cur]
mov [best], eax
mov eax, [d]
mov [bestn], eax
mov eax, [slo]
mov [blo], eax
mov eax, [shi]
mov [bhi], eax
jmp x12
x10:
sub esp, 12
push dword [cur]
call free
add esp, 16
x12:
dec dword [n]
jmp x1
print:
mov dword [i], 0
x13:
mov eax, [i]
cmp eax, [bestn]
jge end
mov dword [j], 0
x14:
mov eax, [j]
cmp eax, [bestn]
jge x17
cmp dword [j], 0
je x15
sub esp, 8
push 32
push fc
call printf
add esp, 16
x15:
mov eax, [i]
imul eax, [bestn]
add eax, [j]
mov ebx, [best]
push dword [ebx + eax * 4]
push fout
call printf
add esp, 8
inc dword [j]
jmp x14
x17:
sub esp, 8
push 10
push fc
call printf
add esp, 16
inc dword [i]
jmp x13
end:
cmp dword [best], 0
je x18
sub esp, 12
push dword [best]
call free
add esp, 16
x18:
lea esp, [ebp - 12]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
xor eax, eax
ret