急啊!高手指导一下8086汇编语言中LOOP实现延时时具体的延时时间是怎么计算的?

急啊!高手指导一下8086汇编语言中LOOP实现延时时具体的延时时间是怎么计算的?,第1张

LOOP实现延时与CUP主频有关,这样写的程序到别的机稿弊子上运行很可能不正确,因为腊谨每个机子的主频很可能就不一样,写个与CPU无关的延迟程序,希望对你有帮助:

WAITP PROC

PUSH AX

XOR AX,AX

LOOP1: IN AL,61H

AND AL,10H

CMP AL,AH

JE LOOP1

MOV AH,AL

LOOP LOOP1

POP AX

RET

WAITP ENDP

这个程序有一个参数cx,调用之前须将它设置成15.08微秒的倍数,轮敬基假如要延迟0.5秒,那么cx就应该是33144(0.5s/15.08us=33144)如果要延迟2秒呢,很简单可以连续调用4次延迟0.5秒的程序,如:

mov bl,4

loop2:mov cx,33144

call WAITP

dec bl

jnz loop2

其它延迟时间可以照上面例子类推

1 sleep(2000)

2 sleep简单,但是如局差果延时比较长,系统就如悔首同死机,下面的方法能在延时的时候处理消息:

COleDateTime starttime = COleDateTime::GetCurrentTime()

COleDateTimeSpan endtime = COleDateTime::GetCurrentTime()-starttime

while(endtime.GetTotalSeconds()<桐前皮2)

{

MSG msg

GetMessage(&msg,0,0)

PreTranslateMessage(&msg)

endtime = COleDateTime::GetCurrentTime()-starttime

}

首先是将R4减1,然后看等于0否,二是转移,减1后结果不是0,则转移到指定的地址,如EDL1,DEL2,结果=0,则往下执行。

整个姿锋歼子程序是个两层循环的延时程序,开始,R3=7FH,是127,再是:R4=FFH,是255,下面开始循环,一条NOP空 *** 作,就是为基侍了延时的,然后DJNZ,R4减1,不为0,转移到EDL1,又是NOP延时,如此,循环255次后,R4=0,迹冲内层循结束,往下,R3减1,R3不为0,转移到DEL2,重新开始R4=FFH,再循环255次。外层循环是R3的127次,内层是R4的255次,一共循环是255*127次,结束返回。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12281688.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存