Не могу вырваться из простого цикла сборки
Вопрос
Меня попросили создать простой цикл на языке ассемблера, но у меня возникли проблемы, поскольку цикл не заканчивается, когда должен, он продолжается в бесконечном цикле.
Мне нужно присвоить ECX переменную, которая принимается при вводе, но в моем коде ниже, даже когда я указываю счетчик напрямую, он все равно попадает в бесконечный цикл.
Мой код здесь (ОБНОВЛЕН):
Код может содержать ошибки, отличные от фактического цикла.
//Отредактировано для пояснения требований к программам...
Программе необходимо ввести значение "n", которое будет использоваться в качестве счетчика для цикла.Затем я ввожу еще "n" чисел, когда число положительное, мне нужно добавить это к переменной postot, когда отрицательное, мне нужно добавить это к переменной negatot.После ввода "n" чисел я печатаю результаты для каждой переменной, и программа завершает работу.
Правка 2:
Исправлена проблема с циклом, правильно очистив стек, поэтому я добавил:
add esp,8
и:
next: push ecx
...
pop ecx
loop next
Это устранило проблему с циклом.
Решение
Ладно, я понял...Вы считываете int номер от пользователя.Затем в строке 41 вы либо переходите к строке 47, либо проваливаетесь в строку 43.
Если вы перейдете к строке 43, то дойдете до строки 45, которая переходит к строке 49 (конец).Если вместо этого вы перешли к строке 47, то попадете на строку 49 (конец).
В обоих случаях вы затем возвращаетесь к строке 29 (следующая).
Вы ожидаете, что ваш регистр ecx будет уменьшаться при каждом достижении цикла и оставаться неизменным во время обработки цикла.
Вы пробовали нажимать ecx примерно на строку 29 и вставлять ее прямо перед циклом?
Другие советы
Я вижу две ошибки:
Там есть
JG positive
там ПОСЛЕ того, как вы увеличите указатель стека.Вы уверены, что хотите проверить результат работы с вашим фреймом стека, а не значение введенного вами числа?jmp end
не делает:Сразу послеend
приходитloop next
.Я не вижу никаких условий для завершения цикла.