中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » DOS 下如何编写Delay 1s的程序。
作者:
标题: DOS 下如何编写Delay 1s的程序。 上一主题 | 下一主题
yanyunfeng
新手上路





积分 8
发帖 3
注册 2008-11-18
状态 离线
『楼 主』:  DOS 下如何编写Delay 1s的程序。

如题:请教各位在DOS 下如何编写Delay 1s的程序。谢谢!

2008-12-19 13:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Sufone
中级用户





积分 256
发帖 124
注册 2007-12-18
状态 离线
『第 2 楼』:  

BASIC、C还是汇编?

2008-12-19 16:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Sufone
中级用户





积分 256
发帖 124
注册 2007-12-18
状态 离线
『第 3 楼』:  

BASIC:
T1=TIMER
DO:LOOP UNTIL (TIMER-F)>=1

汇编:
MOV AH,0
INT 1A
ADD DX,18
MOV BX,DX
LOOP:
INT 1A
CMP DX,BX
JNE LOOP

2008-12-19 16:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yanyunfeng
新手上路





积分 8
发帖 3
注册 2008-11-18
状态 离线
『第 4 楼』:  

Thanks a lot !

2008-12-20 12:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netwinxp
高级用户





积分 741
发帖 366
注册 2007-7-25
状态 离线
『第 5 楼』:  

直接使用INT 1AH的话,有一个可能导致日期翻转失败的风险,建议采用INT 1CH计时,1s大致18次INT 1CH。

2008-12-20 12:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Sufone
中级用户





积分 256
发帖 124
注册 2007-12-18
状态 离线
『第 6 楼』:  

用1C要改写中断,相比之下,用1A再判断一下DX的值似乎更简单

2008-12-21 23:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netwinxp
高级用户





积分 741
发帖 366
注册 2007-7-25
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by Sufone at 2008-12-21 23:45:
用1C要改写中断,相比之下,用1A再判断一下DX的值似乎更简单

但使用1A的问题在于,当时钟处于0点0分的时候,会导致日期翻转失败,也就是少跳了一天。

2008-12-22 11:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Sufone
中级用户





积分 256
发帖 124
注册 2007-12-18
状态 离线
『第 8 楼』:  

也可以用 INT 15H,把 86H 放入 AH,延时的毫秒数放入 CX:DX,然后执行中断

2008-12-22 14:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netwinxp
高级用户





积分 741
发帖 366
注册 2007-7-25
状态 离线
『第 9 楼』:  


PUSH DS
XOR AX,AX
MOV DS,AX
MOV DX,[046C]
DELAY:MOV AX,[046C]
SUB AX,DX
CMP AX,12H;时间差达到1秒?
JB DELAY
POP DS
;后续程序
酱紫直接读取BIOS数据区的内容来延时是最简单明了的,可以用在所有的IBM PC兼容机,唯一的遗憾是不能用在虚拟机,这是虚拟机的BUG,因为它没有刷新BIOS数据区的内容。

[ Last edited by netwinxp on 2008-12-23 at 16:04 ]

2008-12-23 09:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Sufone
中级用户





积分 256
发帖 124
注册 2007-12-18
状态 离线
『第 10 楼』:  

mov cx,0
mov dx,3e8
mov ah,86
int 15

这样更简单,而且AT以上的都行,未验证过虚拟机

2008-12-23 11:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
createhebe
新手上路





积分 10
发帖 5
注册 2008-12-12
状态 离线
『第 11 楼』:  

#include<dos.h>

...
delay(1000); /*1000ms*/

2008-12-25 23:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: