我正在组装一个基于文本的动画,其中需要大量的屏幕刷新以使其尽可能平滑并模拟弹跳物理。我使用int 1ah
调用来控制屏幕刷新延迟,并使形状看起来好像在达到峰值时减速并在回落时加速。在每个CALL CLEAR
.
我编写了处理移动形状代码的代码,它按预期工作。当我添加在屏幕上放置固定横幅的附加代码时,它会在某个点后锁定 dosbox。
以下代码的八个变体包含在一个更大的循环中。它运行良好,直到我添加;PRINT BANNER
到第七个内循环。实际上,它LEA
在下面的循环中的第一个中断,在没有横幅的情况下测试时不存在。
.REPEAT
LEA SI,SHAPE
MOV DH,ROW
MOV DL,COL
CALL CLEAR
CALL PUTSHAPE
;PRINT BANNER
LEA SI,BANNER
MOV DH,25
MOV DL,39
CALL PUTSHAPE
;END BANNER
MOV TIME, 1
MOV AH, 0
INT 1AH
ADD TIME, DX
.WHILE DX < TIME
MOV AH, 0
INT 1AH
.ENDW
ADD COL, 2
SUB ROW, 4
DEC D7
MOV CX, D7
MOV TIME, 0
.UNTILCXZ
我在这里期待太多太快了吗?我尝试重新安排代码以LEA
在延迟后调用第二个代码,并针对与基于文本的动画不完全相关的问题提出了许多其他建议,并且肯定使用了我无法遵循的指令。我是一个认真的汇编初学者,从一本使用自定义库的书中学习。我在从命令提示符运行的 32 位 Win 7 Pro 上尝试了该程序,并收到 NTVDM.EXE 错误。关于代码明显问题的任何想法或见解?