彙編語言 | 實驗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分兩次寫入。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章