;编程,以“年/月/日 时:分:秒“的格式,显示当前的日期、时间。
data segment
s db 9,8,7,4,2,0
data ends
stack segment stack
db 10h dup (?)
stack ends
assume cs:code
assume ds:data
code segment
start: mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov bx,160*12+35*2 ;定位显存12行35列
mov si,0
mov dl,'/' ;年月日分割符
mov cx,6 ;循环6次
s1: push cx ;cx入栈,保护
mov al,s[si] ;从数据段取要访问的单元号
out 70h,al
in al,71h ;从端口读取相应单元数据到al
mov ah,al
mov cl,4
shr ah,cl ;分解al中BCD码为十位数码值和个位数码值
and al,00001111b
add ah,30h
add al,30h ;转换成ASCLL字符码
mov es:[bx],ah ;显示十位数码
mov es:[bx+2],al ;显示个位数码
mov es:[bx+4],dl ;显示分隔符
pop cx ;出栈
cmp cx,5 ;在第二次循环结束以前改变分隔符为空格
je change ;以便第三次显示年月日和时分秒的分隔符
jb change1 ;两次以上则分隔符为:
s2:inc si
add bx,6
loop s1
mov ax,4c00h
int 21h
change:mov dl,20h ;改年月日和十分秒的分隔
jmp short s2 ;转至loop内继续
change1:cmp cx,2 ;第5次循环结束以前改分隔符为空格,因结尾不需要分隔
je s3 ;检测是否第5次循环,是则转s3
mov dl,':' ;不是第5次显示分隔符:
jmp short s2
s3:mov dl,' ' ;改分隔符为空格
jmp short s2
code ends
end start
俺的程序是不是有点复杂了,看论坛上有好多短的,高手们看下怎么才能不间断刷新呢? |