与时间相关的中断在Windows中无法在汇编中工作?

时间:2015-03-13 16:35:51

标签: windows assembly dos machine-code

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

我使用的是Windows XP SP3,并打开了一个DOS窗口,然后运行 debug.exe

我进入了这个短暂的大会计划:

  

MOV CX,3D

     

MOV DX,0900

     

MOV AH,86

     

INT 15

功能86h在中断15h,执行延迟, 延迟的持续时间为CX,DX,单位为MicroSeconds。

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

运行这个简短的程序,遗憾的是没有任何延迟, 它会立即退出。

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

功能编号0,在中断1Ah,将PC的时钟计数返回到CX,DX。 每个刻度是1 / 18.2秒。

然后我进入并运行了这个简短的程序:

  

MOV AH,0

     

INT 1A

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

有两个时间相关的中断在Windows中不起作用的原因吗? 似乎其他中断确实有效..

我能做些什么让它们起作用,所以我可以实现我想写的小延迟程序吗?

谢谢

1 个答案:

答案 0 :(得分:2)

Omer,我在CodeReview上发现了一个解决你的延迟问题的出色解决方案 它直接在地址0040h:006Ch使用BIOS计时器tick变量,而不是通过int 1Ah上的函数00h询问它的值。

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