怎样在DOS程序中建立一个延时器(delay timer)?

我们这些程序员很幸运,因为Microsoft公司的专家认为建立一个独立于硬件的延时器是一个好主意。显然,这样做的目的在于,无论程序运行在什么速度的计算机上,都可产生一段固定的延迟时间。下面的程序说明了如何在DOS中建立一个延时器:
# include <stdio. h>
# include %dos. h>
# include <stdlib. h>
void main(int argc,char ** argv)
{
      union REGS regs:
      unsiged long delay;
      delay = atoI(argv[1]) ;        / * assume that there is an argument * /
      / * multiply by 1 for microsecond-granularity delay * /
      / * multiply by 1000 for millisecond-granularity delay * /
      / * multiply by 1000000 for second-granularity delay * /
      delay * =1000000;
      regs. x. ax = 0x8600 ;
      regs. x. cx= (unsigned int )((delay & 0xFFFF0000L)>>16) ;
      regs. x. dx = (unsigned int ) (delay & 0xFFFF)
      int86 (0x15, &regs, &regs) ;
}
上例通过DOS中断15H的86H功能来实现延时,延迟时间以微秒为单位,因此,上述延时程序认为你可能要使用一个非常大的数字,于是它分别用CX和DX寄存器来接受延时值的高16位和低16位。上述延时程序最多可以延时49.亿微妙---大约等于1.2小时。

上例假设延时值以微秒为单位,它把延时值乘以一百万,因此在命令行中可以输入以秒为单位的延时值。例如,“delay 10”命令将产生10秒的延时。