今天看到老师出的汇编的课程设计,是要完成一个显示系统时间的功能.根据要求上提供的源代码,很快的就实现了,但我想老师不会要求这么简单的,于是我想接下来的几天里就想办法完善一下,主要就是图形画界面显示,增加年月日,增加时间的设置功能等,这个简单的可以供大家参考一下!
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
这篇博客介绍了如何使用汇编语言实现显示系统时间的功能,包括获取系统时间、转换为BCD码以及通过显存直接输出到屏幕上。博主计划进一步完善,添加图形界面和时间设置功能。
显示系统时间&spm=1001.2101.3001.5002&articleId=3455883&d=1&t=3&u=eee2f1d4cc084b87a8ba10ee2c8afaba)
7223

被折叠的 条评论
为什么被折叠?



