王爽《汇编语言》第十四章实验——访问CMOS RAM
一. 基本概念:
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:codecode segment
start: mov ax,0b800hmov es,axmov di,160*12+30*2mov al,0ahpush dirdata: dec alcmp al,7jb rtimecall showadd di,6jmp short rdatartime: sub al,2cmp al,0fehje signcall showadd di,6jmp short rtimesign: pop diadd di,4mov byte ptr es:[di],'/'add di,6mov byte ptr es:[di],'/'add di,12mov byte ptr es:[di],':'add di,6mov byte ptr es:[di],':'mov ax,4c00hint 21hshow: push axpush cxout 70h,alin al,71hmov cx,4mov ah,alshr ah,cland al,0fhadd ah,30hadd al,30hmov es:[di],ahmov es:[di+2],alpop cxpop axret
code ends
end start
3. 运行结果:
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
