编程,以“年/月/日 时:分:秒”的格式,显示当前的日期、时间。
注意:CMOS RAM中存储着系统的配置信息,除了保存时间信息的单元以外,不要向其他的单元中写入内容,否则将引起一些系统错误。
assume cs:code
data segment
db 9, '/', 8, '/', 7, ' ', 4, ':', 2, ':', 0
; 年 月 日 时 分 秒
data ends
code segment
start:
mov ax,0b800h
mov es,ax
mov di,160*12+40
mov ax,data
mov ds,ax
mov si,0
mov cx,6
main:
mov ax,0
mov al,ds:[si]
call getValueByNum
;数值
mov byte ptr es:[di],ah
mov byte ptr es:[di+1],02h
mov byte ptr es:[di+2],al
mov byte ptr es:[di+3],02h
;若输出到秒时,则后面不用再输出间隔符
;直接结束循环
cmp cx,1
je next
;间隔符
mov al,ds:[si+1]
mov byte ptr es:[di+4],al
mov byte ptr es:[di+5],02h
add di,6
add si,2
loop main
next:
mov ax,4c00h
int 21h
;子程序:getValueByNum
;功能:根据编号分别获取年、月、日、时、分、秒的BCD码,
;并将其转化为对应的ASCII码
;参数:(al)=传入的编号
;返回值:(al)=个位的ASCII码,(ah)=十位的ASCII码
getValueByNum:
push cx
push bx
out 70h,al
in al,71h
mov ah,al
mov cl,4
shr ah,cl
and al,00001111b
add ah,30h
add al,30h
pop bx
pop cx
ret
code ends
end start