编程,以"年/月/日 时:分:秒" 的格式,显示当前的日期、时间。
实验代码:
assume cs:code,ds:data
data segment
db '2000/00/00 00:00:00',0
db 9,8,7,4,2,0
data ends
code segment
start:
mov ax,data
mov ds,ax
mov si,2 ;
mov cx,6 ;循环6次,取出年月日时分秒
mov bx,20 ;从年份开始读
s1:
push cx
mov ax,[bx] ;依次从端口读取数据
out 70h,al
in al,71h
mov ah,al
mov cl,4 ;右移
shr ah,cl ;确定十位
and al,00001111b ;个位
add al,30h ;把BCD码变成对应的ASCII码
add ah,30h
mov ds:[si],ah ;数据放在ds:[si]储存
inc si
mov ds:[si],al
inc bx ;bx循环来确定年月日时分秒
add si,2 ;相邻时间单位间隔3个字符,前面已经有 inc si了
pop cx
loop s1
mov ax,0b800h ;数据写到显存
mov es,ax
mov di,120*12+40*2
mov si,0
show:
mov cl,ds:[si]
mov ch,0
jcxz ok
mov es:[di],cl
inc si
add di,2
jmp short show
ok:jmp short start ;不让程序结束,这样能产生动态时间
mov ax,4c00h
int 21h
code ends
end start
运行结果截图
实验小结
通过循环的方式,依次从data段中读取年月日时分秒的地址。最后不用结束程序,而是用jmp short start的方式来使得程序可以动态显示当前时间。
有一个注意点就是,在把时间数据写到ds段时,不能用ax寄存器直接写(会导致顺序颠倒),要用ah和al分两次写入。