Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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 嵌套循环和XOR程序集_Assembly_X86_Nested Loops_Xor - Fatal编程技术网

Assembly 嵌套循环和XOR程序集

Assembly 嵌套循环和XOR程序集,assembly,x86,nested-loops,xor,Assembly,X86,Nested Loops,Xor,目前我的程序汇编很好,但运行时崩溃。我想这可能与我如何使用xor指令有关。我只使用过xor作为密钥加密,我认为我在进行一点翻转时使用它是错误的。我试着将内部循环中的东西移动到外部,但没有任何改变,结果崩溃了,我没有主意了。这个计划的目的是让100人去打开100个储物柜。第一个锁将打开所有锁,第二个锁将每隔一秒打开/关闭一次锁,依此类推。我们应该将数组设置为101,这样我们就可以使用1-100而不是0-99 我正在Microsoft Visual Studio 2010上使用汇编x86 ASM 编

目前我的程序汇编很好,但运行时崩溃。我想这可能与我如何使用xor指令有关。我只使用过xor作为密钥加密,我认为我在进行一点翻转时使用它是错误的。我试着将内部循环中的东西移动到外部,但没有任何改变,结果崩溃了,我没有主意了。这个计划的目的是让100人去打开100个储物柜。第一个锁将打开所有锁,第二个锁将每隔一秒打开/关闭一次锁,依此类推。我们应该将数组设置为101,这样我们就可以使用1-100而不是0-99

我正在Microsoft Visual Studio 2010上使用汇编x86 ASM

编辑:我按照建议更改了一些内容,它没有崩溃,但输出只有少数正确答案。只有可以平方的数字才应该是开放的。我修复了下面的代码以显示我现在拥有的内容

.data
Locker Byte 101 dup(0)
temp Dword 1
Students DWORD ?
.code
main Proc

   mov   ecx, SIZEOF Locker
   dec   ecx
   mov   eax, 0
OuterLoop:
   mov   Students, ecx; keeps counter for Outer
   mov   ecx, 100; The lockers
   inc   eax
   Call  WriteDec; to show which locker is opened/closed
   mov   esi, 0
InnerLoop:
   xor   Locker[esi+eax], 1
   add   esi, temp; goes to next locker

Loop InnerLoop

   mov   ecx, Students

   cmp   Locker[esi], 0
   jz    isClosed
   jnz   isOpen

isClosed:
   mWrite" closed."
   Call   Crlf
  jmp    Restart

isOpen:
   Mwrite" open."
   Call   Crlf
   jmp    Restart

Restart:

loop OuterLoop
ret
main ENDP

xor看起来不错,问题是esi超出了界限,因为它永远不会重置。另外,我猜你想在底部的第三行增加临时工,而不是增加esi。似乎仍然崩溃了。将inc esi更改为inc temp它似乎在进入内部循环时崩溃。您正在使用Locker[esi],即使esi是用OFFSET Locker初始化的。正如@Jester所指出的,在开始外循环的另一次迭代之前,似乎并没有重置esi。