顯示當前的時間日期

 

;編程:訪問CMOS RAM以年/月/日 時:分:秒的格式,顯示當前的時間日期
assume cs:code
data segment
db 0,2,4,7,8,9,10
data ends
time segment
db 15  dup(0)
time ends
code segment
start:mov ax,data
      mov ds,ax
      mov si,0
      mov ax,time
      mov es,ax
      mov di,0
      call change
      call showtime
      mov ax,4c00h
      int 21h
;名稱:change
;功能:從端口中取出時間的BCD碼,轉化成十進制放到內側段time中
;參數:ds:[si]爲時間在CMOS RAM中存放的內存單元號,es:[di]指向time段的首地址
change: push cx
 chgs:  mov al,ds:[si]
        cmp al,10
 je next
 out 70h,al ;要訪問的內存單元號寫入地址端口70h
 in al,71h  ;從數據端口71h讀出內存單元號所對應的內容

 mov ah,al  ;al爲從CMOS RAM的ds:[si]號單元讀出的數據
 mov cl,4
 shr ah,cl  ;移位次數大於1必須放入cl,不能使用其他寄存器存放
 and al,00001111b ;低位
 add ah,30h
 add al,30h
 mov dl,al
 mov dh,0
 mov al,0
 push dx ;低位
 push ax ;高位
 inc si
 loop chgs

  next: mov cx,6
  chgs1:pop ax
        mov byte ptr es:[di],ah ;高位
 pop dx
        mov byte ptr es:[di+2],dl  ;低位
 add di,4
 loop chgs1
 pop cx
        ret

;名稱:showtime
;功能:按 年/月/日  時:分:秒的格式,顯示當前的時間日期
;參數:time段存放着時間
showtime:push ax
         push cx
         mov ax,time
  mov ds,ax
  mov bp,0
  mov ax,0b800h
  mov es,ax
  mov di,10*160+30*2
         mov cx,3
  shows: mov ax,ds:[bp]   ;年/月/日
  mov es:[di],al
         mov ax,ds:[bp+2]
  mov es:[di+2],al
 
         mov ax,ds:[bp+12]  ;時: 分: 秒
  mov es:[di+20],al
  mov ax,ds:[bp+14]
  mov es:[di+22],al
  add bp,4
  add di,6
  loop shows

  mov byte ptr es:[10*160+30*2+4],'/'  ;反斜槓
  mov byte ptr es:[10*160+30*2+10],'/' 
  mov byte ptr es:[10*160+30*2+24],':';冒號
  mov byte ptr es:[10*160+30*2+30],':'
  pop cx
  pop ax
  ret
code ends
end start

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