Delay Proc
push dx
push cx
xor ax,ax
int 1ah
mov cs:Times,dx
mov cs:Times[2],cx
Read_Time:
xor ax,ax
int 1ah
int 3
sub dx,cs:Times
sbb cx,cs:Times[2]
cmp dx,Didas
jb Read_Time
pop cx
pop dx
ret
Times dw 0,0
Delay EndP
有人能详细解释一下这段代码吗,看不大明白。
------解决方案--------------------------------------------------------
看下 int1ah 的 00 功能调用就能明白个大概了。就是看当前的时钟 ticks 数是不是过了指定的值;没有就继续等,这样就达到了延时的目的了。
不过,这代码里的 int3 好像不妥。可以用 hlt 指令,但也该在 int1ah 指令前更合适。
------解决方案--------------------------------------------------------
Delay Proc 函数到开头
push dx 取出要比较到值
push cx
xor ax,ax ax清0
int 1ah 读或者写入时间
AH=0 读当前时钟值 CX:DX=时钟计数值
AH=1 置当前时钟值 CX:DX=时钟计数值
mov cs:Times,dx 把时间数值存储起来
mov cs:Times[2],cx
Read_Time: 标识符
xor ax,ax 再次清零,以便下次循环使用
int 1ah
int 3 中断
sub dx,cs:Times 现在cx:dx中是读入的时间,和给定到时间相比较
sbb cx,cs:Times[2]
cmp dx,Didas 判断是否相等
jb Read_Time
pop cx 入栈
pop dx
ret 结束
Times dw 0,0
Delay EndP