16位汇编读取CMOS时间并显示

;***************************************
; 程序功能:读取CMOS时间并显示
; CMOS读写方法如下:
; 1.向地址端口70H写入要访问的单元地址
; 2.从71H端口读出数据
; 注意:CMOS中存放的是BCD码
; 数码:  0    1    2    3    4
; BCD码:0000 0001 0010 0011 0100 
; 数码:  5    6    7    8    9
; BCD码:0101 0110 0111 1000 1001 
; CMOS RAM中时间格式如下:
; 秒:00H
; 分:02H
; 时:04H
; 日:07H
; 月:08H
; 年:09H
; BCD码转ASCII码:BCD + 30H = ASCII
;***************************************
assume cs:code,ds:data,ss:stack

stack segment
	db 16 dup(0)
stack ends

data segment
;格式:     年      月      日      时      分      秒
	db 0,0,'-',0,0,'-',0,0,' ',0,0,':',0,0,':',0,0,'$'
;CMOS端口号序列	
	db 09h,08h,07h,04h,02h,00h
data ends

code segment
start:		
		mov ax,stack ;栈段初始化
		mov ss,ax
		mov sp,10h
		
		mov ax,data  ;数据段初始化
		mov ds,ax
		
		;数据段偏移量如下:		
		;       L       H
		;年:   0,      1
		;月:   3,      4
		;日:   6,      7
		;时:   9,     10
		;分:  12,     13
		;秒:  15,     16
		;      L->si   H->di		
		mov si,0
		mov di,1
		xor bx,bx
		mov bx,18
		mov cx,6
	s:	mov al,ds:[bx]
		out 70h,al
		in al,71h
		mov ah,al
		push cx
		mov cl,4
		shr ah,cl
		pop cx
		and al,00001111b
		add ah,30h
		add al,30h
		mov byte ptr ds:[si],ah
		mov byte ptr ds:[di],al
		inc bx
		add si,3
		add di,3
		loop s
		
		mov dx,offset ds:[0]  ;设置字符串首地址
		call show
		
		mov ah,4ch            ;返回OS
		mov al,0h             ;返回值:0
		int 21h	              ;调用21号中断
;*********************
; 子程序:显示字符
; 入口参数:DS:DX=串首址
; 返回值:无
;*********************
show:	push ax
		mov ah,09h
		int 21h
		pop ax
		ret
code ends
end start

运行效果图如下:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值