所以我在这里有一个过程,它应该打印一个用"~“初始化的数组。因为我想要一个12x12的游戏板,所以我对144乘以12使用模除法,并在余数为0时打印新行。我肯定在某个地方遇到了问题,我的第一个提示是,它在打印电路板的第二秒就崩溃了。
displayBoard PROC
lea esi, dArray
mov eax, 144
.while eax > 0
xor edx, edx
mov ecx, 12
div ecx
.if edx == 0
print 0DH, 0AH
.endif
print esi
sub eax, 1
.endw
mov eax, input()displayBoard ENDP
发布于 2014-05-10 06:45:55
问题是div指令同时设置了edx和eax -它是这样做的:
eax := edx:eax DIV ecx
edx := edx:eax MOD ecx所以它会重写eax寄存器并中断循环。
此外,eax是一个临时寄存器,对print的调用也会覆盖它。请参阅ABI文档或目标平台的调用约定,了解哪些寄存器是跨函数调用保留的,哪些是未保留的。
最后,我不知道print是做什么的,但是同时使用它和立即的CR/LF值0DH, 0AH和esi (指向某个数组的指针)似乎有点可疑。
https://stackoverflow.com/questions/23574956
复制相似问题