题
我被要求用汇编语言创建一个简单的循环,但我遇到了麻烦,因为循环没有在应该结束的时候结束,而是继续无限循环。
我需要给 ECX 一个由输入获取的变量,但在下面的代码中,即使我直接指定计数器,仍然会陷入无限循环。
我的代码在这里(已更新):
该代码可能包含除实际循环之外的错误。
//编辑程序要求的解释...
该程序需要输入“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
. 。我没有看到任何终止循环的条件。
不隶属于 StackOverflow