装配延迟子程序

时间:2015-11-25 21:25:09

标签: animation assembly delay

我需要一些关于程序集中延迟例程的基本信息。

我正在尝试创建一个小动画,我从老师那里得到了常规的基础,但我不明白如何实现它。当我调用子程序时,所有内容都会滞后,并且不会绘制其余的图形。

我的问题:我是否必须在延迟中指定动画相关代码?如果没有,那么我是否必须创建一个循环来编写我的动画代码?为什么这段代码会让我的整个程序停止?

    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

1 个答案:

答案 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或其他东西来减慢事情。