;***************************************
; 程序功能:讀取CMOS時間並顯示
; CMOS讀寫方法如下:
; 1.向地址端口70H寫入要訪問的單元地址
; 2.從71H端口讀出數據
; 注意:CMOS中存放的是BCD碼
; 數碼: 0 1 2 3 4
; BCD碼:0000 0001 0010 0011 0100
; 數碼: 5 6 7 8 9
; BCD碼:0101 0110 0111 1000 1001
; CMOS RAM中時間格式如下:
; 秒:00H
; 分:02H
; 時:04H
; 日:07H
; 月:08H
; 年:09H
; BCD碼轉ASCII碼:BCD + 30H = ASCII
;***************************************
assume cs:code,ds:data,ss:stack
stack segment
db 16 dup(0)
stack ends
data segment
;格式: 年 月 日 時 分 秒
db 0,0,'-',0,0,'-',0,0,' ',0,0,':',0,0,':',0,0,'$'
;CMOS端口號序列
db 09h,08h,07h,04h,02h,00h
data ends
code segment
start:
mov ax,stack ;棧段初始化
mov ss,ax
mov sp,10h
mov ax,data ;數據段初始化
mov ds,ax
;數據段偏移量如下:
; L H
;年: 0, 1
;月: 3, 4
;日: 6, 7
;時: 9, 10
;分: 12, 13
;秒: 15, 16
; L->si H->di
mov si,0
mov di,1
xor bx,bx
mov bx,18
mov cx,6
s: mov al,ds:[bx]
out 70h,al
in al,71h
mov ah,al
push cx
mov cl,4
shr ah,cl
pop cx
and al,00001111b
add ah,30h
add al,30h
mov byte ptr ds:[si],ah
mov byte ptr ds:[di],al
inc bx
add si,3
add di,3
loop s
mov dx,offset ds:[0] ;設置字符串首地址
call show
mov ah,4ch ;返回OS
mov al,0h ;返回值:0
int 21h ;調用21號中斷
;*********************
; 子程序:顯示字符
; 入口參數:DS:DX=串首址
; 返回值:無
;*********************
show: push ax
mov ah,09h
int 21h
pop ax
ret
code ends
end start
運行效果圖如下: