实验要求:
编程,以“年/月/日 时:分:秒”的格式,显示当前的日期、时间。
需知:
在CMOS RAM中,存放年月日时分秒这六个信息的长度都为1个字节,存放单元为:
秒:0
分:2
时:4
日:7
月:8
年:9
以BCD码存放(以4位二进制数表示十进制数码的编码方法)
十进制:0 , 1…
二进制:0000 0001…
数值26 ,用BCD码表示为 0010 0110.
要访问CMOS RAM的信息,首先要向地址端口70h写入要访问的单元地址,例如:
mov al,8 (高4位表示十位,低4位表示个位)
out 70h,al
然后从数据端口71h取得指定单元中的数据:
in al,71h
实验代码
assume cs:code
data segment
db 9,8,7,4,2,0 对应CMOS RAM 中的年、月、日、时、分、秒
db'00/00/00 00:00:00','$' 开辟一个内存空间用来放转化为十进制的字符
data ends
code segment
start: mov ax,data
mov ds,ax
mov si,0 单元号
mov di,6 新内存空间的偏移地址
mov cx,6
s0: mov al,[si]
out 70h,al
in al,71h
call s s为将CMOS RAM中BCD码转化为十进制字符子程序
inc si
add di,3
loop s0
mov ah,2 上一章节调用10h中2号子程序设置光标位置
mov bh,0 页
mov dh,12 行
mov dl,34 列
int 10h
mov ax,data 21h中9号子程序,在光标位置显示字符串
mov ds,ax 以’$’为结束符
mov dx,6 ds:dx 指向字符串首地址
mov ah,9
int 21h
s: push cx 子程序
push si
push di
mov ah,al
mov cl,4
shr ah,cl 右移4位得到十位上的值
and al,00001111b 通过与运算得到个位上的值
add ah,30h 加30h,变为可以在屏幕上显示的字符
add al,30h
mov [di],ah
mov [di+1],al
pop di
pop si
pop cx
ret
code ends
end start