2021-03-05

王爽 《汇编语言》 实验14:显示CMOS中的时间

   CMOS中存放的地址: 秒:0  分:2     时:4       日:7      月:8      年:9  

  目的:显示 “年/月/日 时:分:秒"

方法一:

assume cs:code
data segment
  db '00/00/00 00:00:00','$'
  db 9,8,7,4,2,0
data ends

code segment
start:
	mov ax,data
	mov ds,ax
	mov si,0
	mov cx,6
	mov bx,18

s1:	push cx
	mov ax,[bx]
	out 70h,al
	in al,71h  ;取出来的时CBD编码:用4位表示10进制数。
				; 例如:0001 0001 表示 1*10 + 1 = 11

	mov ah,al
	mov cl,4
	shr al,cl
	add al,30h
	and ah,00001111b ;CBD取得低4位
	add ah,30h

	mov ds:[si],ax    ;注意前后颠倒,al保存10位上数,ah保存个位上数

	inc bx
	add si,3 
	pop cx
	loop s1

	mov ah,2       ;放置光标
	mov bh,0
	mov dh,12
	mov dl,40
	int 10h

	mov ax,data    ;DOS提供的9号中断例程,显示字符。
	mov ds,ax		
	mov dx,0  	;需提供 ds:dx作为数据的首地址,遇到'$'后结束。
	mov ah,9	;中断向量9。
	int 21h

	mov ax,4c00h  ;同上,中断向量4ch,功能:返回程序。
	int 21h

code ends
end start

方法二:

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
		mov bx,20

	s1:	push cx
		mov ax,[bx]
		out 70h,al
		in al,71h

		mov ah,al
		mov cl,4
		shr al,cl
		add al,30h
		and ah,00001111b
		add ah,30h

		mov ds:[si],ax

		inc bx
	 	add si,3 
	 	pop cx
	 	loop s1

		mov ax,0b800h
		mov es,ax
		mov di,160*12+40*2
		mov si,0

	showtime:
		mov cl,ds:[si]
		mov ch,0
		jcxz ok
		mov es:[di],cl
		inc si
		add di,2
		jmp short showtime
	ok:
		mov ax,4c00h
		int 21h
code ends
end start

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值