这个实验比较简单,书中给出的例子是直接把CMOS中读出的值复制到显存中,不过我没有这么做,我是将从CMOS中读出的数据放到数据段中,然后调用dos的中断函数直接显示字符串,下面是代码。
assume cs:code
data segment
db 9,8,7,4,2,0 ;存放顺序读取的CMOS端口
db '00/00/00 00:00:00','$' ;存放预先设置的时间字符串格式
data ends
stack segment
db 32 dup (0)
stack ends
code segment
start: mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,10h
mov bx,6
mov si,0
mov cx,6
s: call parse
inc si
add bx,3
loop s
; 设置光标位置
mov ah,2
mov bh,0
mov dh,5
mov dl,0
int 10h
;显示字符串
mov dx,6
mov ah,9
int 21h
mov ax,4c00h
int 21h
;这个函数是解析CMOS中读出的数据,是书中的示例
parse: mov al,[si]
out 70h,al
in al,71h
push cx
mov cl,4
mov ah,al
and ah,00001111b
and al,11110000b
shr al,cl
add ah,30h
add al,30h
mov [bx],ax
pop cx
ret
code ends
end start
下面是程序运行后的结果图: