您的位置:首页 > 其它

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

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

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: