无法突破简单的Assembly循环

时间:2009-11-13 16:05:14

标签: assembly masm

我被要求用汇编语言创建一个简单的循环,但是我遇到了麻烦,因为循环没有结束,它会继续无限循环。

我需要给ECX一个由输入获取的变量,但在我的代码中,即使我直接指定计数器仍然会陷入无限循环。

我的代码在这里(更新):

PasteBin Code

代码可能包含实际循环以外的错误。

//编辑解释程序要求...

程序需要输入“n”,它将用作循环的计数器。然后我输入“n”个更多的数字,当一个数字是正数我需要将它添加到变量postot,当负数我需要将它添加到变量negatot。输入“n”数后,我打印每个变量的结果,程序退出。

编辑2:

通过正确清除堆栈来修复循环问题,所以我添加了:

        add esp,8

next:   push ecx
        ...
pop ecx
loop next

修复了循环问题。

2 个答案:

答案 0 :(得分:1)

好的,我明白了。 。 。 你读取用户的数字。 然后在第41行,你要么跳到第47行,要么直到第43行。

如果你去第43行,你就到达第45行,跳到第49行(结束)。 相反,如果你去了第47行,你将进入第49行(结束)。

在这两种情况下,您都会循环回到第29行(下一步)。

您希望ecx寄存器在每次到达循环时递减,并且在循环处理期间保持不变。

你有没有试过在第29行附近推动ecx,然后在你循环之前弹出它?

答案 1 :(得分:0)

我看到两个错误:

  • 在递增堆栈指针后,有一个JG positive。您确定要检查摆弄堆栈框架的结果,而不是您输入的数字的值吗?

  • jmp end没有:endloop next之后。我没有看到任何终止循环的条件。