編程,以"年/月/日 時:分:秒" 的格式,顯示當前的日期、時間。
實驗代碼:
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分兩次寫入。