所以我这里有一个程序,应该打印一个用“〜”初始化的数组。由于我需要一个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
答案 0 :(得分:0)
问题是div
指令同时设置edx
和eax
- 它会这样做:
eax := edx:eax DIV ecx
edx := edx:eax MOD ecx
因此它会覆盖eax
寄存器并中断循环。
此外,eax
是临时注册,对print
的调用也会覆盖它。请参阅ABI文档或调用您的目标平台约定,以查看哪些寄存器以及哪些寄存器不在函数调用中保留。
最后,我不知道print
做了什么,但是将它与立即的CR / LF值0DH, 0AH
和esi
一起使用,指向某个数组的指针似乎很可疑。 / p>