王爽《汇编语言》第十四章实验——访问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: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. 运行结果:


                                      


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值