push bx ;保存
push cx ;保存
..
..
pop cx ;回复
pop bx ;回复
加了push和pop是保证父程序的bx,cx不会被破坏.
至于延时效果,看什么cpu速度和场合吧.
延时多久 = 指令数 = 也就是cx loop的次数和bx递减的次数 = 0ffh x 0ffffh
= 16,711,425次(10进制)
运行 一千六百多万次指令,在我的老旧机器仍是一闪而过,根本不知道是几多分之一秒.
然后开了dosbox虚拟机(模拟极早期dos的运行方式和速度),这个程序运行了五至六秒.
利用运行多次指令来达到延时效果已经不合时宜,同一部电脑,场合不同已有极大的差异.
可知这种老旧程序根本不行(起码三四十年前的思路),丢之不可惜.
下面是另一个延时子程序.
这是个不需用cpu时脉(指令速度)作准的迟延程序,任何系统和cpu迟延时间一致.
呼叫 delay_proc 子程序即可, 用法
mov ax, 直接值
;
call delay_proc ;子程序可以迟延ax/18秒,若ax=36,则迟延约2秒(不管是i7还是10年前的电脑都是2秒)
delay_proc:
push es
push dx
mov dx,40h
mov es,dx
mov dx,es:[006ch]
add dx,ax
delay10:
cmp es:[006ch],dx
jbe delay10
pop dx
pop es
ret
[此贴子已经被作者于2018-5-25 20:44编辑过]