95 dup(?)
означает 95 повторений 0
. Используйте ваш отладчик для выгрузки памяти для вашего массива. Это так же, как dword 23, 45, 21, 78, 0, 0, 0, 0, 0, ...
Таким образом, последний счет делает своп 0 и падает до dtoa
. В противном случае ваша программа потерпит крах.
У вас есть еще одна серьезная ошибка: если последний элемент не является новым наименьшим, значение loop forLoop1
падает с cont
до swap
с ECX = 0. Таким образом, инструкция loop
в нижней части swap
уменьшит ECX до 0xFFFFFFFF
и прыгнет, потому что это не ноль. В конечном итоге вы будете виноваты в доступе за пределы памяти.
jmp cont
бесполезен прямо перед меткой cont:
: выполнение уже переходит к следующей инструкции. Что вам нужно, это jmp out_of_loop
после ветви цикла в блоке cont:
, чтобы вы не упали в swap:
.
И кстати, loop
инструкция медленная, вы никогда не должны ее использовать. Просто используйте cmp/jb
на указателе, который вы уже увеличиваете, или dec ecx/jnz
.