汇编语言_实验14简写:读取CMOS RAM中的年月日时分秒

这段代码展示了如何从CMOS RAM中读取年月日时分秒,并在屏幕上显示。程序使用了8086汇编语言,通过端口70H和71H与CMOS进行通信,读取指定地址的数据,并将其转换为BCD码进行显示。程序还包括了格式化输出的子程序,能够以年/月/日时:分:秒的格式展示时间。
摘要由CSDN通过智能技术生成

读取CMOS RAM中的年月日时分秒。

assume cs:code,ss:stack,ds:data
data segment
		db 128 dup(0)
data ends
stack segment stack
		db 128 dup(0)
stack ends

code segment
start:
		mov ax,stack
		mov ss,ax
		mov sp,128	; 初始化栈
		
		call init_reg
		call show_month
;==============================================		
init_reg:
		mov bx,0b800h
		mov es,bx
		ret
;============================================
show_month:
		mov al,8		;月的内存地址 
		out 70H,al		;将al放入70端口,
		in al,71h		;71端口读al位置的数据 
		
		;al是一个BCD码
		mov ah,al
		shr ah,1
		shr ah,1
		shr ah,1
		shr ah,1
		and al,00001111B
		
		add ah,30H
		add al,30H
		
		mov di,160*10 + 40*2
		mov es:[di+0],ah
		mov byte ptr es:[di+1],00010010B
		mov es:[di+2],al
		mov byte ptr es:[di+3],01000010B
				
		ret
		
code ends
end start

在这里插入图片描述
下面的代码参考博客:https://blog.csdn.net/include_heqile/article/details/81037744

assume cs:code

;//日 时:分:秒
;可以位此程序设计两个子程序,一个用来接收单元参数
;一个用来接收格式参数(:/),并显示字符串
 
code segment  
;unit段存放各字段再CMOS RAM的位置
unit:	db 9, 8, 7, 4, 2, 0
;return数据段用来存放show_what子程序的返回值(修改后的ax值)
return:   dw 0
start:		
	mov ax, cs
	mov ds, ax
	;si用来记录unit中的偏移量
	;di用来记录显示字符串的偏移量
	mov si, offset unit
	mov di, 0
	; :的ASCII码值为58 ; 这个值由dl来存储 
	; /的ASCII码值位47
	mov dl, 47	
	mov cx, 6	;一共要循环六次,依次取出年月日时分秒
s:	mov al, ds:[si]
	call show_what
	inc si
	cmp si, 3
	;一旦年月日输出完毕,就将格式符换成 :
	je hour
	cmp si, 6
	;当时间也已经输出完毕之后,就不需要再输出格式化符了
	je null
	jmp year
null:		mov dl, 0
			;如果不跳转到year代码的话,程序还是会顺序执行到
			;hour代码处,从而覆盖dl的值
			jmp year
hour:		mov dl, 58 
year:		call show_how	
			add di, 6
			loop s
			
			mov ax, 4c00h
			int 21h   
			  
show_what:	
		push cx
		push ax 
		push si
			
		out 70h, al
		in al, 71h	;1 读出年份
			
		mov ah, al
		mov cl, 4
		shr ah, cl
		and al, 00001111b
			
		add ah, 30h
		add al, 30h 
		
		mov si,offset return ;存入return 中
		mov ds:[si], ax  	    
			
		pop si 
		pop ax
		pop cx
		ret
			
show_how:	push bx
			push ax
			push dx
			push di
			push si 
			
			mov bx, 0b800h
			mov es, bx 
			mov si, offset return
			mov ax, ds:[si]
			mov byte ptr es:[160*24+di], ah
			;设置背景色为绿色
			mov ah, 2
			mov byte ptr es:[160*24+di+1], ah
			
			mov byte ptr es:[160*24+2+di], al 
			mov byte ptr es:[160*24+2+di+1], ah
			;显示格式化符
			mov byte ptr es:[160*24+4+di], dl
			mov byte ptr es:[160*24+4+di+1], ah
			 
			pop si
			pop di
			pop dx
			pop ax
			pop bx
			ret
code ends
end start

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值