1

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

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

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

PasteBin 代码

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

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

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

编辑2:

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

        add esp,8

和:

next:   push ecx
        ...
pop ecx
loop next

这解决了循环问题。

4

2 回答 2

1

好,我知道了。. . 您从用户那里读取 int 号码。然后在第 41 行,您要么跳到第 47 行,要么直接跳到第 43 行。

如果您转到第 43 行,那么您将到达第 45 行,然后跳转到第 49 行(结束)。相反,如果您转到第 47 行,您将跌至第 49 行(结束)。

在这两种情况下,您然后循环回到第 29 行(下一个)。

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

您是否尝试过在第 29 行左右推送 ecx,然后在循环之前弹出它?

于 2009-11-13T16:21:42.893 回答
0

我看到两个错误:

  • JG positive你增加一个堆栈指针之后,里面有一个。您确定要检查摆弄堆栈帧的结果,而不是您输入的数字的值吗?

  • jmp end不:紧随其后end的是loop next. 我没有看到任何终止循环的条件。

于 2009-11-13T16:19:24.740 回答