在CMOS RAM中,存放着当前的时间:年、月、日、时、分、秒。这6个信息的长度为1个字节,存放单元为:
秒:0 分:2 时:4 日:7 月:8 年:9
这些数据以BCD码的方式存放。
从CMOS RAM中读取信息的方法是:
out 70H,寄存器 ;寄存器中存放了要访问的单元地址
in 寄存器,71H ;从单元处读取数据
接下来的是代码:
;编程,以 "年:月:日 时:分:秒" 的格式,显示当前的日期、时间。
assume cs:code
code segment
start: ;设置显示的位置
mov ax,0B800H
mov ds,ax
mov si,12*160+60
;读取要显示的内容
mov al,9
mov cx,3
;写入年:月:日
r_1:push ax
out 70H,al
in al,71H
push cx
mov bh,al
mov bl,al
mov cl,4
shr bh,cl ;高位BCD码
and bl,00001111B;低位BCD码
pop cx
add bh,30H
add bl,30H
mov byte ptr [si],bh
add si,2
mov byte ptr [si],bl
add si,2
cmp cx,1
jz r_1ok ;if cx=1 跳转到r_ok处
mov byte ptr [si],':'
r_1ok:
pop ax
add si,2
dec al
loop r_1
;写入两个空格
mov byte ptr [si],' '
add si,2
mov byte ptr [si],' '
add si,2
;写入时:分:秒
;---秒:0 分:2 时:4
mov al,4
mov cx,3
r_2:push ax
out 70H,al
in al,71H
mov bh,al
mov bl,al
pop ax
push cx
mov cl,4
shr bh,cl
and bl,00001111B
add bh,30H
add bl,30H
;写入内存中
pop cx
mov byte ptr [si],bh
add si,2
mov byte ptr [si],bl
add si,2
cmp cx,1
jz r_2ok
mov byte ptr [si],':'
r_2ok:
add si,2
sub al,2
loop r_2
;程序结束
mov ah,4cH
int 21H
code ends
end start