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

来源:互联网 发布:易趣网与淘宝网的不同 编辑:程序博客网 时间:2024/06/05 03:33

用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的老式机器来实验。
;=====================================

0 0
原创粉丝点击