我需要一些关于程序集中延迟例程的基本信息。
我正在尝试创建一个小动画,我从老师那里得到了常规的基础,但我不明白如何实现它。当我调用子程序时,所有内容都会滞后,并且不会绘制其余的图形。
我的问题:我是否必须在延迟中指定动画相关代码?如果没有,那么我是否必须创建一个循环来编写我的动画代码?为什么这段代码会让我的整个程序停止?
PUSH CX
PUSH DX
OUTER_LOOP:
MOV CX,200
DEC CX
JE FINISH
INNER_LOOP:
MOV DX,0FFFFH
DEC DX
JE OUTER_LOOP
JMP INNER_LOOP
FINISH:
POP DX
POP CX
答案 0 :(得分:2)
你的循环都是无限循环,因为你在每次迭代时将循环计数重置为max,而不是在循环之前重复一次。
OUTER_LOOP:
MOV CX,200 ; move this to before OUTER_LOOP:
DEC CX
JE FINISH
INNER_LOOP:
MOV DX,0FFFFH ; move this to before INNER_LOOP:
DEC DX
JE OUTER_LOOP
JMP INNER_LOOP
这是一个延迟循环,所以慢速是目标,但你可以更紧凑地编写它:
MOV CX,200
XOR DX,DX ; inner loop does 65536 iterations, not 65535
OUTER_LOOP:
INNER_LOOP:
DEC DX
JNZ INNER_LOOP
DEC CX
JNZ OUTER_LOOP
你可以投入无偿的div
或其他东西来减慢事情。