Не могу вырваться из простого цикла сборки

StackOverflow https://stackoverflow.com/questions/1730165

  •  20-09-2019
  •  | 
  •  

Вопрос

Меня попросили создать простой цикл на языке ассемблера, но у меня возникли проблемы, поскольку цикл не заканчивается, когда должен, он продолжается в бесконечном цикле.

Мне нужно присвоить 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.Я не вижу никаких условий для завершения цикла.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top