用80x86汇编语言读写系统时间

本文提供了一个使用80x86汇编语言编写的程序实例,该程序初始设置计数器为60,每过一秒递减1,当计数值达到55秒时触发鸣笛报警。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用80x86汇编语言编程,设置初值为60,每过一秒减1,减至5秒时鸣笛报警。
悬赏分:100 | 解决时间:2011-6-4 19:39
最佳答案:
;=====================================
;下列程序已经实验通过.
DATA  SEGMENT
DATA  ENDS
;------------------------
CODE  SEGMENT
      ASSUME  CS:CODE, DS:DATA
START:
      MOV  AX, DATA
      MOV  DS, AX
;-------------------------
      MOV  AH, 2DH  ;写时间.
      MOV  DH, 0    ;此时为0秒.
      INT  21H      ;写入系统.
;之后,系统的秒数会自动增加
;-------------------------
      MOV  BL, 55   ;设定到55秒报响.
LOP:  MOV  AH, 2CH  ;读时间.
      INT  21H
      SUB  DH, BL   ;减55
      JB   LOP      ;不够减就继续读.
;-------------------------
RING: MOV  AH, 2    ;输出字符
      MOV  DL, 7    ;BP
      INT  21H      ;报响.
;-------------------------
      INC  BL       ;下次在56秒报响.
      CMP  BL, 1    ;如果到了1秒.
      JZ   EXIT     ;就结束.
      CMP  BL, 60   ;到了60秒?
      JNE  LOP      ;没有就继续读.
      MOV  BL, 0    ;到了60秒,改为0
      JMP  LOP      ;0秒,也要去响一次.
;-------------------------
EXIT:
      MOV  AH, 4CH
      INT  21H
CODE  ENDS
      END  START   
;------------------------
在WINDOWS的DOS窗口执行时,好像略快了一点。

回答时间:2011-6-4 19:39
回答者: 做而论道 | 十五级采纳率:43% 名人
提问者对于答案的评价:very good!无以为报,唯将所有分数奉上
原题网址:http://zhidao.baidu.com/question/275699474.html
;=====================================
说明:
程序中,用到了DOS操作系统的读写时间的系统功能调用。

      MOV  AH, 2CH  ;读时间.
      INT  21H
读出后:
CH = 小时(0~23);
CL = 分钟(0~59);
DH = 秒数(0~59);
DL = 1/100秒数(0~99)。

用 2DH 号功能调用,即可写入时间。写入前,各寄存器也要按照上述格式设置。
写入时间的功能调用,目前在WinXP环境下,仅仅是影响到了一个DOS窗口,并不改变整机的时间。

在WinXP环境下进行测试发现,在DOS窗口中,时间的渡过,有些快,且不准。
第一次实验,约30秒就报时了,第二次实验,约50多秒,就报时了。

可惜找不到一个装有纯DOS的老式机器来实验。
;=====================================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值