Как найти минимальное значение элемента массива?
У меня уже есть готовая программа, которая находит минимальное значение в массиве, но проблема вся в том, что если я поменяю в массиве допустим цифру 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]
за пределы цикла.