1

我正在使用 TASM 编译的 DosBox 模拟器(在 Windows7 上)上运行 Assembly x86 代码。到目前为止,在我的代码中,我只使用嵌套循环来延迟代码,但现在我正在以不同的循环速率运行我的代码,我发现这不是最好的解决方案。在网上搜索代码示例或中断如何创建计时器并使用它而不是嵌套循环是没有用的,我只在维基百科上看到了一些关于我不理解的称为 PIT 的模糊示例。

有人可以提供一个有效的代码示例来说明如何做到这一点吗?谢谢!

编辑

我尝试使用此代码使用 int 21h 中断进行延迟,但由于某种原因,它比预期的 20 1/100 秒慢得多。也许这可以修复?

redo:   mov ah, 2ch
        int 21h     ;MILIS IN DL            ;BUG HERE -> FIX TIMER
        cmp dl, 79
        jnc redo
        mov milis, dl
loop1:  mov ah, 2ch
        int 21h
        sub dl, milis
        cmp dl, 20
        jc loop1
4

1 回答 1

0

在 DOS 的世界中,有很多方法可以实现延迟。bios 维护一个时间计数器,该计数器每秒或每 55 毫秒递增 18.2 次,因此您可以询问该计数器并循环,直到根据您想要延迟的时间来通过适当的滴答声。您可以从地址 40:6C 的 BIOS 数据区读取 4 字节计数器值。

但更简单的方法是使用中断 15h 函数 86h,这是 bios 实现的延迟。我不确定它在 DosBOX 中是否有效,但从技术上讲应该可以。

这是一个参考

http://www.ctyme.com/intr/rb-1525.htm

于 2014-05-29T16:36:42.733 回答