当前位置: 代码迷 >> 汇编语言 >> 关于时间延迟的代码有些不懂,该如何解决
  详细解决方案

关于时间延迟的代码有些不懂,该如何解决

热度:2426   发布时间:2013-02-26 00:00:00.0
关于时间延迟的代码有些不懂
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

  相关解决方案