一. 基本概念:
1.端口的读写:
(1). 读操作,从60h端口读入一个字节,指令如下:
in al,60h
(2). 写操作,往20h端口写入一个字节,指令如下:
out 20h,al
(3). 在 in 和 out 指令中,只能使用 ax 或 al 来存放从端口中读入的数据或要发送到端口中的数据。访问8位端口时用al,访问16位端口时用ax。
2. CMOS RAM 芯片
CMOS RAM 芯片的特征:
(1) 包含一个时钟和一个有128个存储单元的RAM存储器。
(2) 该芯片靠电池供电。所以,关机后其内部的时钟仍可正常工作,RAM中的信息不丢失。
(3) 128个字节的RAM中,内部时钟占用 0~0dh 单元来保存时间信息,其余大部分单元用于保存系统配置信息,供系统启动时BIOS程序读取。
(4) 该芯片内部有两个端口,端口地址为 70h 和 71h 。CPU 通过这两个端口来读写CMOS RAM。
(5) 70h 为地址端口存放要访问的 CMOS RAM 单元的地址; 71h 为数据端口,存放从选定的 CMOS RAM 单元中读取的数据,或要写入到其中的数据。
3. shr 和 shl 指令
(1) 这两条指令很简单咯,shr 为逻辑右移指令, shl 逻辑左移指令。
(3) 需要注意的是,当移位数大于1时,必须将移动位数放在寄存器 cl 中。
4. CMOS RAM 芯片中存放的时间信息
在CMOS RAM 中,存放着当前的时间:年、月、日、时、分、秒。这6个信息的长度都为1个字节,存放单元:
秒:0 分:2 时:4 日:7 月:8 年:9
且这些数据以 BCD 码的方式存放。
二. 实验:
1. 实验内容:
以 “年/月/日 时:分:秒“ 的格式在屏幕中间显示当前时间。
2. 实验代码:
assume cs:code
code segment
start: mov ax,0b800h
mov es,ax
mov di,160*12+30*2
mov al,0ah
push di
rdata: dec al
cmp al,7
jb rtime
call show
add di,6
jmp short rdata
rtime: sub al,2
cmp al,0feh
je sign
call show
add di,6
jmp short rtime
sign: pop di
add di,4
mov byte ptr es:[di],'/'
add di,6
mov byte ptr es:[di],'/'
add di,12
mov byte ptr es:[di],':'
add di,6
mov byte ptr es:[di],':'
mov ax,4c00h
int 21h
show: push ax
push cx
out 70h,al
in al,71h
mov cx,4
mov ah,al
shr ah,cl
and al,0fh
add ah,30h
add al,30h
mov es:[di],ah
mov es:[di+2],al
pop cx
pop ax
ret
code ends
end start
3. 运行结果: