在 Windows 中,与时间相关的中断在汇编中不起作用?

Time Related Interrupts Don't Work in Assembly, in Windows?

我想用汇编语言创建一个小程序,它会延迟几秒钟。

我用的是WindowsXP SP3,打开了DOSwindow,运行debug.exe

我在那里输入了这个简短的汇编程序:

MOV CX,3D

MOV DX,0900

MOV AH,86

INT 15

中断15h中的函数86h,执行延时, 延迟的持续时间以 CX、DX 为单位,以微秒为单位。

所以如果我想延迟 4 秒,那么它是 4,000,000microseconds = 3D0900h, 这就是我在 CX,DX 中输入的内容。

运行这个小程序,可惜没有执行任何延迟, 它立即退出。

然后我尝试了另一个中断函数:

函数号0,在中断1Ah中,returnsPC的时钟计数,到CX,DX。 每个刻度为 1/18.2 秒。

然后我输入了运行这个短程序:

MOV AH,0

INT 1A

但不幸的是,CX 和 DX 在 运行 之后都等于 0000h。

2 个与时间相关的中断在 Windows 中不起作用是否有原因? 看来其他中断确实有效..

有什么我可以做的让它们工作,这样我就可以实现我想写的小延迟程序吗?

谢谢

Omer,我在 CodeReview 上找到了一个很好的解决延迟问题的方法。
它直接使用地址 0040h:006Ch 处的 BIOS 计时器滴答变量,而不是通过 int 1Ah 上的函数 00h 询问它的值。

请看一下 https://codereview.stackexchange.com/questions/101035/a-low-tech-approach-to-measuring-game-speed