qintangtao

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

;访问CMOS RAM
;
;编程:
;  以"年/月/日 时:分:秒" 的格式,显示当前的日期、时间
;

  1 assume cs:code
  2 
  3 data segment
  4  db '9/8/7 4:2:0', '$'
  5 data ends
  6 
  7 code segment
  8 start:
  9  
 10    mov ax, data
 11    mov ds, ax
 12    mov bx, 0
 13    mov di, 0 ;初始化参数
 14  
 15  s:  
 16    mov al, [bx] ;al 传递的参数 注意此时al存放的是9的ASCII码
 17    cmp al, '$'
 18    je quit 
 19    call date
 20    inc bx
 21    jmp short s
 22    
 23  ;注意:在s 与 jmp short s  之间不能修改di的值  
 24 
 25 
 26  ;--------------------------------
 27  ;显示时间的子程序
 28  ;参数:
 29  ; 1、al  在COMS RAM中存放时间的地址
 30  ; 2、di  显示的偏移地址 初始位置
 31  ;
 32  ;--------------------------------
 33  date:
 34     push ax
 35     push bx
 36     push cx
 37     push es
 38     
 39     mov bx, 0b800h
 40     mov es, bx
 41     mov bl, 0ah
 42     
 43     ;==================
 44     ;判断模块
 45     ;==================
 46     ;9/8/7 4:2:0    
 47     
 48     ;不是0~9的ASCII码
 49     cmp al, 30h  
 50     jb showfen   
 51     cmp al, 39h
 52     ja showfen   
 53     
 54     ;是0~9的ASCII码
 55     sub al, 30h
 56 
 57     cmp al, 9
 58     je showdate
 59     cmp al, 8
 60     je showdate
 61     cmp al,7
 62     je showdate
 63     cmp al, 4
 64     je showdate
 65     cmp al, 2
 66     je showdate
 67     cmp al, 0
 68     je showdate
 69     
 70     ;都不是则直接显示
 71     add al, 30h
 72     jne showfen
 73   
 74     ;==================
 75     ;显示时间模块
 76     ;==================
 77  showdate: 
 78     ;mov al, 9   al作为参数传递进来
 79     out 70h, al
 80     in al, 71h
 81     mov ah, al
 82     mov cl, 4
 83     shr ah, cl
 84     and al, 00001111b
 85     
 86     ;ASCII才能显示  所有要转换成ASCII
 87     add ah, 30h
 88     add al, 30h
 89     
 90     mov byte ptr es:[160*12+40*2+di], ah  ;显示十位
 91     mov byte ptr es:[160*12+40*2+di+1], bl
 92     mov byte ptr es:[160*12+40*2+di+2], al  ;显示个位
 93     mov byte ptr es:[160*12+40*2+di+3], bl
 94     add di, 4
 95     jmp short dateend
 96     
 97    ;==================
 98    ;显示分割符模块
 99    ;==================
100  showfen:  
101    mov byte ptr es:[160*12+40*2+di], al  ;显示分隔符
102    mov byte ptr es:[160*12+40*2+di+1], bl
103    add di, 2
104    
105  dateend:
106    pop es
107    pop cx
108    pop bx
109    pop ax
110   
111    ret
112    
113  quit:  
114   mov ax, 4c00h
115   int 21h
116   
117 code ends
118 end start

 

posted on 2013-01-22 17:03  qintangtao  阅读(1171)  评论(0编辑  收藏  举报