首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

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

2012-03-26 
关于时间延迟的代码有些不懂DelayProcpush dxpush cxxorax,axint1ahmovcs:Times,dxmovcs:Times[2],cxRead_

关于时间延迟的代码有些不懂
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

热点排行