(汇编实现)显示系统时间

这篇博客介绍了如何使用汇编语言实现显示系统时间的功能,包括获取系统时间、转换为BCD码以及通过显存直接输出到屏幕上。博主计划进一步完善,添加图形界面和时间设置功能。

 今天看到老师出的汇编的课程设计,是要完成一个显示系统时间的功能.根据要求上提供的源代码,很快的就实现了,但我想老师不会要求这么简单的,于是我想接下来的几天里就想办法完善一下,主要就是图形画界面显示,增加年月日,增加时间的设置功能等,这个简单的可以供大家参考一下!

 

 

code    segment 'code'
assume  cs:code,ds:code
org 100h
start:  jmp install
msg     db       'Current time is: '
time0   db ?,?
        db ':'
time1   db ?,?
        db ':'
time2   db ?,?,0,0
oldint1c        dd ?

newint1c: push  ax
          push  bx
          push  cx
          push  dx
          push  si
          push  di
          push  es
          mov   ax,0200h   ;获取系统时间,ch→hours cl→minutes DH→seconds,均为BCD码格式
          int   1ah
          mov   al,ch
          lea   si,time0
          call  bcd
          mov   al,cl
          lea   si,time1
          call  bcd
          mov   al,dh
          lea   si,time2
          call  bcd
          mov   ax,0b800h   ;显存地址      采用直接写显存的方法输出字符
          mov   es,ax       ;es:di 指向显存地址
          mov   di,54*2d
          lea   si,msg
disp:     mov   al,cs:[si]
          inc   si
          or    al,al
          jz    disp0        ;cs=ds
          cld
          stosb
          inc   di        ;将cs:si指向的一个字节传送到es:di
          jmp   disp
disp0:    pop   es
          pop   di
          pop   si
          pop   dx
          pop   cx
          pop   bx
          pop   ax
          jmp   cs:oldint1c    ;新1CH中断的事情做完后调用原来的1CH中断
bcd:      mov   ah,al
          shr   ah,1
          shr   ah,1
          shr   ah,1
          shr   ah,1
          and   al,0fh
          add   ax,'00'
          xchg  ah,al
          mov   cs:[si],ax
          ret
install:  push  cs
          pop   ds
          mov   ax,351ch    ;获取中断向量ES:BX指向中断向量
          int   21h
          mov   word ptr oldint1c,bx
          mov   word ptr oldint1c+2,es
          lea   dx,newint1c
          mov   ax,251ch   ;设置中断向量  DS:DX指向中断向量
          int   21h
          mov   dx,offset install+120h   ;+10H即可,因为如果驻留程序的长为36,如果不
          mov   cl,04h                ; 加10H则计算的节为2,而实际应该为3节
          shr   dx,cl
          mov   ah,31h  ;结束并驻留 DX:保留的长度(内存大小单位为节)
          int   21h
code ends
end start

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值