【发布时间】:2014-05-29 15:39:28
【问题描述】:
我正在使用 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
【问题讨论】:
-
定时操作要么与特定的操作系统或特定的硬件平台密切相关。请添加适当的标签。我会删除不相关的标签。
-
既然这是在DOSBOS模拟器之上,你确定这很重要吗?
-
您可以选择连接到(模拟的)x86、BIOS 或 MSDOS。现在已经发布了代码,很明显您使用的是后者。
-
@wallyk 好的,但是您发现该代码有什么问题吗?
-
我对魔法常量
79和20感到困惑:它们是什么意思?另请注意,DL 中返回的 0.01 秒计数通常不会增加 1。见this。