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

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

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

粘贴Bin代码

该代码可能包含除实际循环之外的错误。

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

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

编辑2:

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

        add esp,8

和:

next:   push ecx
        ...
pop ecx
loop next

这解决了循环问题。

有帮助吗?

解决方案

好的,我知道了。 。 。 你读诠释从用户数量。 然后在线41上你要么跳转到线47或通过落下到线43上。

如果你去第43行,则然后到达线45跳转到线49(结束)。 相反,如果你去线47,你将下降到通过线49(结束)。

在这两种情况下,你然后循环回管线29(下一个)。

您希望您的ECX寄存器递减每次达到循环时间,并为它的循环处理过程中保持不变。

您是否尝试过推在大约29行ECX,而你循环之前正确弹出呢?

其他提示

我看到两个错误:

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

  • jmp end 没有:就在之后 end 来了一个 loop next. 。我没有看到任何终止循环的条件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top