![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-10-31 09:28 |
共 47,815 主题排行 / 349,930 发帖 / 今日 0 篇 / 48,290 会员排行 |
| DOS开发编程 & 发展交流 (开发室) » DOS 下如何编写Delay 1s的程序。 |
| 可打印版本 1,601 / 10 |
| 第1楼 yanyunfeng | 发表于 2008-12-19 13:42 |
| 新手上路 发帖 3 积分 8 | |
|
DOS 下如何编写Delay 1s的程序。 如题:请教各位在DOS 下如何编写Delay 1s的程序。谢谢!
|
|
| 第2楼 Sufone | 发表于 2008-12-19 16:21 |
| 中级用户 发帖 124 积分 256 | |
|
BASIC、C还是汇编?
|
|
| 第3楼 Sufone | 发表于 2008-12-19 16:24 |
| 中级用户 发帖 124 积分 256 | |
|
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 |
|
| 第4楼 yanyunfeng | 发表于 2008-12-20 12:06 |
| 新手上路 发帖 3 积分 8 | |
|
Thanks a lot !
|
|
| 第5楼 netwinxp | 发表于 2008-12-20 12:57 |
| 高级用户 发帖 366 积分 741 | |
|
直接使用INT 1AH的话,有一个可能导致日期翻转失败的风险,建议采用INT 1CH计时,1s大致18次INT 1CH。
|
|
| 第6楼 Sufone | 发表于 2008-12-21 23:45 |
| 中级用户 发帖 124 积分 256 | |
|
用1C要改写中断,相比之下,用1A再判断一下DX的值似乎更简单
|
|
| 第7楼 netwinxp | 发表于 2008-12-22 11:31 |
| 高级用户 发帖 366 积分 741 | |
Originally posted by Sufone at 2008-12-21 23:45: 但使用1A的问题在于,当时钟处于0点0分的时候,会导致日期翻转失败,也就是少跳了一天。 ![]() |
|
| 第8楼 Sufone | 发表于 2008-12-22 14:32 |
| 中级用户 发帖 124 积分 256 | |
|
也可以用 INT 15H,把 86H 放入 AH,延时的毫秒数放入 CX:DX,然后执行中断
|
|
| 第9楼 netwinxp | 发表于 2008-12-23 09:00 |
| 高级用户 发帖 366 积分 741 | |
|
酱紫直接读取BIOS数据区的内容来延时是最简单明了的,可以用在所有的IBM PC兼容机,唯一的遗憾是不能用在虚拟机,这是虚拟机的BUG,因为它没有刷新BIOS数据区的内容。 [ Last edited by netwinxp on 2008-12-23 at 16:04 ] |
|
| 第10楼 Sufone | 发表于 2008-12-23 11:14 |
| 中级用户 发帖 124 积分 256 | |
|
mov cx,0
mov dx,3e8 mov ah,86 int 15 这样更简单,而且AT以上的都行,未验证过虚拟机 |
|
| 第11楼 createhebe | 发表于 2008-12-25 23:42 |
| 新手上路 发帖 5 积分 10 | |
|
#include<dos.h>
... delay(1000); /*1000ms*/ |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |