Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly Can';不要打破一个简单的组装循环_Assembly_Masm - Fatal编程技术网

Assembly Can';不要打破一个简单的组装循环

Assembly Can';不要打破一个简单的组装循环,assembly,masm,Assembly,Masm,我被要求用汇编语言创建一个简单的循环,但我遇到了麻烦,因为循环没有在应该结束的时候结束,而是在一个无限循环中继续 我需要给ECX一个由输入获取的变量,但是在我下面的代码中,即使我直接指定计数器,它仍然会落入一个无限循环中 我的代码在这里(更新): 代码可能包含实际循环以外的错误 //编辑以解释程序要求 程序需要获取一个输入“n”,该输入将用作循环的计数器。然后输入更多的数字,当一个数字为正时,我需要将其添加到变量postot,当为负时,我需要将其添加到变量negatiot。输入“n”号后,我打

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

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

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

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

//编辑以解释程序要求

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

编辑2:

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

        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