第十四章 端口

检测点14.1

(1) 编程,读取CMOS RAM的2号单元的内容。

mov al,2   ;声明要读取的内存单元
out 70H,al ;写入70H端口
in al,71H  ;从71端口读取CMOS RAM的2号内存单元的数据

(2) 编程,向CMOS RAM的2号单元写入0。

mov al,2   ;声明要写入的内存单元
out 70H,al ;写入70端口
mov al,0   ;写入值
out 71H,al ;从71端口写入要在CMOS RAM的2号内存单元写入的数据

检测点14.2

编程,用加法和移位指令计算(ax)=(ax)*10

提示:(ax)*10=(ax)*2+(ax)*8

assume cs:codesg

codesg segment

start:
	mov bx,ax
	shl ax,1 ;ax左移1位

	mov cl,3 ;ax左移3位
	shl bx,cl
	
	add ax,bx ;结果相加

	mov ax,4c00H
	int 21H
codesg ends

end start

实验14:访问CMOS RAM

实验要求:编程,以“年/月/日 时:分:秒”的格式,显示当前的日期、时间。

代码实现与完整注释:

assume cs:codesg

codesg segment

start:
	mov ax,0B800H ;显存定位
	mov es,ax
	mov di,160*12+40*2

	mov al,9 ;年
	call show_time_data
	mov byte ptr es:[di+4],'/'
	add di,6

	mov al,8 ;月
	call show_time_data
	mov byte ptr es:[di+4],'/'
	add di,6

	mov al,7 ;日
	call show_time_data
	mov byte ptr es:[di+4],' '
	add di,6

	mov al,4 ;时
	call show_time_data
	mov byte ptr es:[di+4],':'
	add di,6

	mov al,2 ;分
	call show_time_data
	mov byte ptr es:[di+4],':'
	add di,6

	mov al,0 ;秒
	call show_time_data

	mov ax,4c00H
	int 21H
;---
;子程序名称:show_time_data
;功能:读取CMOS RAM中存储的系统时间,并转换成ASCII码后在屏幕上显示
;入口参数:al(端口单元号),di(显示位置)
;返回值:无
;---
show_time_data:
	push ax 		 ;保存寄存器值
	push cx

	out 70H,al 		 ;读取al参数端口单元号的日期数据
	in al,71H
	
	mov ah,al 		 ;临时存储两个BCD码
	mov cl,4
	shr ah,cl 		 ;右移动4位,得到高4位上的十位数
	and al,00001111B 	 ;高四位置为0,得到低4位上的个位数

	add al,30H 		 ;个、十位转为ascii码
	add ah,30H

	mov es:[di],ah	 	 ;写入显存
	mov es:[di+2],al

	pop cx			 ;还原寄存器值
	pop ax
	ret
codesg ends

end start
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值