MASM32模块化部门

时间:2014-05-09 22:33:07

标签: assembly masm masm32

所以我这里有一个程序,应该打印一个用“〜”初始化的数组。由于我需要一个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

1 个答案:

答案 0 :(得分:0)

问题是div指令同时设置edxeax - 它会这样做:

eax := edx:eax DIV ecx
edx := edx:eax MOD ecx

因此它会覆盖eax寄存器并中断循环。


此外,eax是临时注册,对print的调用也会覆盖它。请参阅ABI文档或调用您的目标平台约定,以查看哪些寄存器以及哪些寄存器不在函数调用中保留。


最后,我不知道print做了什么,但是将它与立即的CR / LF值0DH, 0AHesi一起使用,指向某个数组的指针似乎很可疑。 / p>