Не может вырваться из простого цикла сборки - PullRequest
1 голос
/ 13 ноября 2009

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

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

Мой код здесь (ОБНОВЛЕНО):

Код PasteBin

Код может содержать ошибки, отличные от фактического цикла.

// Отредактировано для объяснения требований к программам ...

Программа должна принять вход "n", который будет использоваться в качестве счетчика для цикла. Затем я беру на входе «n» больше чисел, когда число положительное, мне нужно добавить это к переменной postot, а когда отрицательное, мне нужно добавить это к переменной negatot. После ввода «n» чисел я печатаю результаты для каждой переменной и программа завершается.

Редактировать 2:

Исправлена ​​проблема зацикливания путем правильной очистки стека, поэтому я добавил:

        add esp,8

и

next:   push ecx
        ...
pop ecx
loop next

Что исправило проблему с циклом.

Ответы [ 2 ]

1 голос
/ 13 ноября 2009

Хорошо, я понял. , , Вы читаете int номер от пользователя. Затем в строке 41 вы либо переходите на строку 47, либо падаете на строку 43.

Если вы перейдете к строке 43, вы достигнете линии 45, которая переходит к строке 49 (конец). Если вместо этого вы перешли на строку 47, вы попадете на строку 49 (конец).

В обоих случаях вы возвращаетесь к строке 29 (далее).

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

Вы пытались нажать ecx в строке 29 и вытолкнуть его прямо перед циклом?

0 голосов
/ 13 ноября 2009

Я вижу две ошибки:

  • Там есть JG positive ПОСЛЕ ТОГО, КАК вы увеличиваете указатель стека. Вы уверены, что хотите проверить результат игры со стековым фреймом, а не значение введенного вами числа?

  • jmp end не: сразу после end приходит loop next. Я не вижу никаких условий для завершения цикла.

...