在 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
我想用汇编语言创建一个小程序,它会延迟几秒钟。
我用的是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