Assembly Can';不要打破一个简单的组装循环
我被要求用汇编语言创建一个简单的循环,但我遇到了麻烦,因为循环没有在应该结束的时候结束,而是在一个无限循环中继续 我需要给ECX一个由输入获取的变量,但是在我下面的代码中,即使我直接指定计数器,它仍然会落入一个无限循环中 我的代码在这里(更新): 代码可能包含实际循环以外的错误 //编辑以解释程序要求 程序需要获取一个输入“n”,该输入将用作循环的计数器。然后输入更多的数字,当一个数字为正时,我需要将其添加到变量postot,当为负时,我需要将其添加到变量negatiot。输入“n”号后,我打印每个变量的结果,程序退出 编辑2: 通过正确清除堆栈修复了循环问题,因此我添加了:Assembly Can';不要打破一个简单的组装循环,assembly,masm,Assembly,Masm,我被要求用汇编语言创建一个简单的循环,但我遇到了麻烦,因为循环没有在应该结束的时候结束,而是在一个无限循环中继续 我需要给ECX一个由输入获取的变量,但是在我下面的代码中,即使我直接指定计数器,它仍然会落入一个无限循环中 我的代码在这里(更新): 代码可能包含实际循环以外的错误 //编辑以解释程序要求 程序需要获取一个输入“n”,该输入将用作循环的计数器。然后输入更多的数字,当一个数字为正时,我需要将其添加到变量postot,当为负时,我需要将其添加到变量negatiot。输入“n”号后,我打
add esp,8
以及:
修复了循环问题。我看到两个错误:
- 在增加堆栈指针后,其中有一个
。是否确实要检查修改堆栈帧的结果,而不是检查输入的数字的值JG正值
没有:在jmp-end
之后紧接着是一个end
循环。我看不到终止循环的任何条件
- 在增加堆栈指针后,其中有一个
。是否确实要检查修改堆栈帧的结果,而不是检查输入的数字的值JG正值
没有:在jmp-end
之后紧接着是一个end
循环。我看不到终止循环的任何条件
- 我看到两个错误:
- 好的,我知道了。
您从用户处读取int数字。
然后在第41行,你要么跳到第47行,要么跳到第43行
如果你走到第43行,你会到达第45行,然后跳到第49行(结束)。
如果改为转到第47行,则将转到第49行(结束)
在这两种情况下,您将返回到第29行(下一步)
您希望ecx寄存器在每次到达循环时都递减,并且在循环处理期间保持不变
你试过在29号线附近按ecx,然后在循环之前弹出它吗?好的,我知道了。
您从用户处读取int数字。
然后在第41行,你要么跳到第47行,要么跳到第43行
如果你走到第43行,你会到达第45行,然后跳到第49行(结束)。
如果改为转到第47行,则将转到第49行(结束)
在这两种情况下,您将返回到第29行(下一步)
您希望ecx寄存器在每次到达循环时都递减,并且在循环处理期间保持不变
你试过在第29行附近按ecx,然后在循环之前弹出它吗?我甚至不知道哪个循环有问题。我甚至不知道哪个循环有问题。我想如果ecx为0,循环会自动结束?应该,你可以尝试sub-ecx,1 cmp ecx 0 je SomeotherLabela我认为如果ecx为0,循环将自动结束?应该,您可以尝试sub ecx,1 cmp ecx 0 je SomeotherLabela对此进行快速测试,删除第30行到第49行的所有内容。如果它退出了循环,那么您知道循环中的某些东西正在改变ecxIt的值。当我删除所有内容时,我可以在自动窗口(Visual Basic C++)中看到ECX计数器正在递减。您是否尝试按下并弹出ECX?作为快速测试,请删除第30行到第49行的所有内容。如果它退出了循环,那么您知道循环中的某些东西正在改变ecxIt的值。当我删除所有内容时,我可以在自动窗口(Visual Basic C++)中看到ECX计数器正在递减。您是否尝试按下并弹出ECX?
next: push ecx
...
pop ecx
loop next