我正在尝试在16位MASM程序集x86中创建一个睡眠/延迟程序,例如,每500ms屏幕上打印一个字符.
从我所做的研究,似乎有三种方法来实现这一点 – 我想使用那个使用cpu时钟滴答的方法.
从我所做的研究,似乎有三种方法来实现这一点 – 我想使用那个使用cpu时钟滴答的方法.
请注意,我在Mac OS X Snow Leopard上通过VMWare Fusion运行Windows XP – 我不知道是否影响任何事情.
有人可以指出我正确的方向,还是提供一个可以调整的代码的工作?谢谢!
我发现的代码应该是每秒在屏幕上打印“A”,但不起作用(我想使用毫秒).
TOP: MOV AH,2C INT 21 MOV BH,DH ; DH has current second GETSEC: ; Loops until the current second is not equal to the last,in BH MOV AH,2C INT 21 CMP BH,DH ; Here is the comparison to exit the loop and print 'A' JNE PRINTA JMP GETSEC PRINTA: MOV AH,02 MOV DL,41 INT 21 JMP TOP
编辑:遵循GJ的建议,这是一个工作程序.只是叫它
DELAY PROC TIMER: MOV AH,00H INT 1AH CMP DX,WAIT_TIME JB TIMER ADD DX,3 ;1-18,where smaller is faster and 18 is close to 1 second MOV WAIT_TIME,DX RET DELAY ENDP
其实可以使用ROM BIOS中断1Ah功能00h,“读取当前时钟计数”.或者您可以在地址$40:$6C上阅读双字,但您必须确保原子阅读.它以约18.2 Hz的速度增加MS-DOS.
欲了解更多信息,请参阅:The DOS Clock