电子钟-汇编程序

这篇博客介绍了一位作者在汇编语言环境下编写电子钟程序的过程,包括设置时间、闹钟和显示时间等功能。作者提到在互联网上未找到相关参考资料,所以自行研究IBM-PC汇编语言程序设计,并成功编写了程序。程序存在CPU占用率高的问题,但已通过MASM5编译运行。博客还提供了程序代码和详细的步骤说明。
摘要由CSDN通过智能技术生成

电子钟-汇编程序

        最近一段时间,在做一个题目,主要实现汇编语言下面的电子钟功能.提供主要的设置时间,设置闹铃,显示时间等功能。本来想从网上找个参考,也好让自己更快的完成任务,也更快的入手.没想到,这么大一个Internet竟然没有让我发现一个很好的参考,说的准确一点,其实是根本没有发现任何一个参考. 只有一个是没有完成的,只有大致轮廓,不过我觉得不可行,索性自己,查阅IBM-PC汇编语言程序设计,最后写了个出来,拿出来供大家学习参考.同时如有不妥善指出,希望大家批评指正..主要目的是为了促进提高大家的学习.

       下面是程序,已经在MASM5下编译运行通过..但有个缺点,也是明显的,就是CPU占用率太多.日后有时间再更正好了.

--------------------------------------------------------------------------------------------------------------------------------------------------

(请尊重原创,如果引用,请注明出处.)

;***************************************************************************
;Author:
;Date  : 2005/12/24
;College: Zhejiang University of Science and Technology
;Subject:A simple Colck program writen by Asmble language.
;function: Display Time
;                Set Time
;                Set Clock Ring
;                Set Display Style
;***************************************************************************
;程序简介:
; 采用驻留中断程序的方式,将系统定时器提供给用户的ICH中断进行重新设计,加载新的
; 处理程序,使得每秒得到中断。主程序首先注册新的中断处理程序,从系统取得系统时间
; 然后无限等待,直到在中断程序中检测到有按键事件的发生,然后,主程序取消中断处理程序,
; 开始判断输入的键,然后根据相应的按键,提供相应的设计功能。
; 中断处理程序每次得到系统定时器的中断时,判断是否到达1秒(约18.2次为1秒)。如果到达
; 则,更新时间,存入数据区,然后更新数据的显示。当有按键事件发生时,设置数据区的按键
; 标记为'真'。当主程序检查到该标记为真时,则取消中断程序的驻留。然后处理相应的事件。
;
;主要步骤:
; 1.定义显示界面
; 2.调用系统时间,并将得到的二进制数值转换成ASCII码,将数据存入内存
; 3.定时的将存在内存区的时间数用显示字符串的形式显示出来(采用ICH中断)
; 4.获取键盘按键值,判断键值决定是否退出系统或执行其他功能
; 5.时间设定功能,通过键盘设定时,分,秒(时:分:秒)
; 6.闹钟功能,定时报声(时:分)

;存在的缺点:
; 1.对输入时间的格式没有严格控制,比如输入11:11:11 同11'11'11,或 11,11,11
;   同样的效果;
; 2.当程序运行时,由于主程序无限循环,然后等待中断刷新时间,因为无限循环,因此
;   占用CPU使用时间比较多。以后扩展可采用一些方式比如,WAIT,HLT等功能实现资源的
;   节省。
; 3.有些函数可以进一步进行抽象和整合。从而使得代码数量减少。
;
;参考书籍:IBM-PC汇编语言程序设计(第2版),沈美明,温冬婵,清华大学出版社
;    296页,中断向量的设置与恢复;
;    301页,定时器中断程序
;    389页,通用发声程序
;***************************************************************************
 .model small
;-------------------------------------------------------------------------
 .stack
;-------------------------------------------------------------------------
 .data

HOUR     db  ?
MIN         db  ?
SEC        db  ?
MSEC     db  ?  

NHOUR         db 0 ;设置时间使用
NMIN              db 0   ;设置时间使用
NSEC             db 0 ;设置时间使用

RHOUR         db 1 ;设置闹铃时间使用
RMIN               db 1 ;设置闹铃时间使用
RSEC             db 1 ;设置闹铃时间使用


FUNKEY db ? ;功能设置使用

keySw    db 00h ;是否按键开关
RingSw db 00h ;闹铃开关 

SWITCH db 0FFh ;刷新开关,真,则不断在定时器中断函数中刷新,否则不刷新

 n db 0dh,0ah,'$'
 count dw 1  
 sMsg         db '****  welcome to Simple clock   ****',0dh,0ah,'$'
 qMsg         db '**** Please Input q to quit  ****',0dh,0ah
                    db '  ','**** Input s to set new Time ****',0dh,0ah
                    db '  ','**** Input r to set ringTime ****',0dh,0ah,'$'
 setTMsg   db 'Please Input new Time(HH:MM:SS)',0dh,0ah,'$'
 setRMsg   db 'Please Input Ring Time(HH:MM)',0dh,0ah,'$'
 
 authorMsg db '---------------------------------------',0dh,0ah
            db 'Author:ChengZengcun',0dh,0ah
            db 'E-mail:bohemia1985@163.com',0dh,0ah
            db 'Zhejiang University of Science and Technology',0dh,0ah
            db 'Version 1.0',0dh,0ah
            db 'Date:2005/12/23',0dh,0ah
            db '---------------------------------------',0dh,0ah,'$'
 
;-------------------------------------------------------------------------
 .code
 

PUSHA     MACRO
       PUSH DS
              PUSH      AX
              PUSH      BX
              PUSH      CX
              PUSH      DX
          ENDM

POPA  

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值