我被要求用汇编语言创建一个简单的循环,但是我遇到了麻烦,因为循环没有结束,它会继续无限循环。
我需要给ECX一个由输入获取的变量,但在我的代码中,即使我直接指定计数器仍然会陷入无限循环。
我的代码在这里(更新):
代码可能包含实际循环以外的错误。
//编辑解释程序要求...
程序需要输入“n”,它将用作循环的计数器。然后我输入“n”个更多的数字,当一个数字是正数我需要将它添加到变量postot,当负数我需要将它添加到变量negatot。输入“n”数后,我打印每个变量的结果,程序退出。
编辑2:
通过正确清除堆栈来修复循环问题,所以我添加了:
add esp,8
和
next: push ecx
...
pop ecx
loop next
修复了循环问题。
答案 0 :(得分:1)
好的,我明白了。 。 。 你读取用户的数字。 然后在第41行,你要么跳到第47行,要么直到第43行。
如果你去第43行,你就到达第45行,跳到第49行(结束)。 相反,如果你去了第47行,你将进入第49行(结束)。
在这两种情况下,您都会循环回到第29行(下一步)。
您希望ecx寄存器在每次到达循环时递减,并且在循环处理期间保持不变。
你有没有试过在第29行附近推动ecx,然后在你循环之前弹出它?
答案 1 :(得分:0)
我看到两个错误:
在递增堆栈指针后,有一个JG positive
。您确定要检查摆弄堆栈框架的结果,而不是您输入的数字的值吗?
jmp end
没有:end
来loop next
之后。我没有看到任何终止循环的条件。