Как найти минимальное значение элемента массива?

У меня уже есть готовая программа, которая находит минимальное значение в массиве, но проблема вся в том, что если я поменяю в массиве допустим цифру 7 на -100, то у меня все равно выведет -15. Не могу понять в чем проблема и как ее пофиксить.

.486
.model flat, stdcall
option casemap: none
include /masm32/include/windows.inc
include /masm32/include/user32.inc
include /masm32/include/kernel32.inc
includelib /masm32/lib/user32.lib
includelib /masm32/lib/kernel32.lib
include /masm32/macros/macros.asm
uselib masm32, comctl32, ws2_32
include <\masm32\include\windows.inc>
include <\masm32\include\kernel32.inc>
includelib <\masm32\lib\kernel32.lib>
include <\masm32\include\user32.inc>
includelib <\masm32\lib\user32.lib>
include <\masm32\include\masm32.inc>
includelib <\masm32\lib\masm32.lib>
include <\masm32\include\debug.inc>
includelib <\masm32\lib\debug.lib>

.data

msg_title db "Title", 0
A DB 1h
x dd -15,1,2,3,4,5,6,7,8,9,10,11
n dd 12
buffer db 128 dup(?)
format db "%d",0
min dd ?
imin dd ?

.code

start:

mov ecx, n
dec ecx
xor edi, edi ; указатель на 1-й элемент, принятый за начальный минимум 
mov esi, 1 ; указатель на 2-й элемент (его индекс 1)

cycle:
    mov eax, x[esi]
    cmp eax, x[esi]
    jge @next
    mov edi, esi
@next:
    inc esi
    loop cycle
    mov imin, edi ; запись индекса минимального элемента
    mov eax, x[edi]
    mov min, eax ; запись индекса минимального элемента

PrintDec imin
PrintLine
PrintDec min

invoke ExitProcess, 0
end start

Ответы (1 шт):

Автор решения: Mikhailo

Смотрите, вы в цикле делаете

mov eax, x[esi]
cmp eax, x[esi]

Т.е. записываете в eax некоторое значение и сравниваете eax с этим значением. Они всегда равны!

Вынесите

mov eax, x[esi]

за пределы цикла.

→ Ссылка