我想用汇编语言创建一个小程序,延迟几秒钟。
我使用的是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中不起作用的原因吗? 似乎其他中断确实有效..
我能做些什么让它们起作用,所以我可以实现我想写的小延迟程序吗?
谢谢
答案 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