汇编语言 | 实验14 访问CMOS RAM

编程,以"年/月/日 时:分:秒" 的格式,显示当前的日期、时间。

实验代码:

assume cs:code,ds:data
data segment
	db '2000/00/00 00:00:00',0
	db 9,8,7,4,2,0
data ends
code segment
	start:
		mov ax,data
		mov ds,ax
		mov si,2	;
		mov cx,6	;循环6次,取出年月日时分秒
		mov bx,20	;从年份开始读
		
		
	  s1:
		push cx
		mov ax,[bx]		;依次从端口读取数据
		out 70h,al
		in al,71h
		
		
		mov ah,al
		mov cl,4		;右移
		shr ah,cl		;确定十位
		and al,00001111b	;个位
		
		add al,30h		;把BCD码变成对应的ASCII码
		add ah,30h
		
		mov ds:[si],ah  ;数据放在ds:[si]储存
		inc si
		mov ds:[si],al
		
		inc bx	;bx循环来确定年月日时分秒
		add si,2	;相邻时间单位间隔3个字符,前面已经有 inc si了
		pop cx
		loop s1
		
		mov ax,0b800h	;数据写到显存
		mov es,ax
		mov di,120*12+40*2
		mov si,0
		
	  show:
		mov cl,ds:[si]
		mov ch,0
		jcxz ok
		
		mov es:[di],cl
		inc si
		add di,2
		jmp short show
		
	  ok:jmp short start	;不让程序结束,这样能产生动态时间
	  mov ax,4c00h
	  int 21h
	  
	code ends
end start

运行结果截图

在这里插入图片描述

实验小结

通过循环的方式,依次从data段中读取年月日时分秒的地址。最后不用结束程序,而是用jmp short start的方式来使得程序可以动态显示当前时间

有一个注意点就是,在把时间数据写到ds段时,不能用ax寄存器直接写(会导致顺序颠倒),要用ah和al分两次写入。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值