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

汇编 | 2015-05-24 19:21:55 | 2841次阅读 | 0评
  1. ;***************************************  
  2. ; 程序功能:读取CMOS时间并显示  
  3. ; CMOS读写方法如下:  
  4. ; 1.向地址端口70H写入要访问的单元地址  
  5. ; 2.从71H端口读出数据  
  6. ; 注意:CMOS中存放的是BCD码  
  7. ; 数码:  0    1    2    3    4  
  8. ; BCD码:0000 0001 0010 0011 0100   
  9. ; 数码:  5    6    7    8    9  
  10. ; BCD码:0101 0110 0111 1000 1001   
  11. ; CMOS RAM中时间格式如下:  
  12. ; 秒:00H  
  13. ; 分:02H  
  14. ; 时:04H  
  15. ; 日:07H  
  16. ; 月:08H  
  17. ; 年:09H  
  18. ; BCD码转ASCII码:BCD + 30H = ASCII  
  19. ;***************************************  
  20. assume cs:code,ds:data,ss:stack  
  21.   
  22. stack segment  
  23.     db 16 dup(0)  
  24. stack ends  
  25.   
  26. data segment  
  27. ;格式:     年      月      日      时      分      秒  
  28.     db 0,0,'-',0,0,'-',0,0,' ',0,0,':',0,0,':',0,0,'$'  
  29. ;CMOS端口号序列    
  30.     db 09h,08h,07h,04h,02h,00h  
  31. data ends  
  32.   
  33. code segment  
  34. start:        
  35.         mov ax,stack ;栈段初始化  
  36.         mov ss,ax  
  37.         mov sp,10h  
  38.           
  39.         mov ax,data  ;数据段初始化  
  40.         mov ds,ax  
  41.           
  42.         ;数据段偏移量如下:        
  43.         ;       L       H  
  44.         ;年:   0,      1  
  45.         ;月:   3,      4  
  46.         ;日:   6,      7  
  47.         ;时:   9,     10  
  48.         ;分:  12,     13  
  49.         ;秒:  15,     16  
  50.         ;      L->si   H->di        
  51.         mov si,0  
  52.         mov di,1  
  53.         xor bx,bx  
  54.         mov bx,18  
  55.         mov cx,6  
  56.     s:  mov al,ds:[bx]  
  57.         out 70h,al  
  58.         in al,71h  
  59.         mov ah,al  
  60.         push cx  
  61.         mov cl,4  
  62.         shr ah,cl  
  63.         pop cx  
  64.         and al,00001111b  
  65.         add ah,30h  
  66.         add al,30h  
  67.         mov byte ptr ds:[si],ah  
  68.         mov byte ptr ds:[di],al  
  69.         inc bx  
  70.         add si,3  
  71.         add di,3  
  72.         loop s  
  73.           
  74.         mov dx,offset ds:[0]  ;设置字符串首地址  
  75.         call show  
  76.           
  77.         mov ah,4ch            ;返回OS  
  78.         mov al,0h             ;返回值:0  
  79.         int 21h               ;调用21号中断  
  80. ;*********************  
  81. ; 子程序:显示字符  
  82. ; 入口参数:DS:DX=串首址  
  83. ; 返回值:无  
  84. ;*********************  
  85. show:   push ax  
  86.         mov ah,09h  
  87.         int 21h  
  88.         pop ax  
  89.         ret  
  90. code ends  
  91. end start  
博友评论,共0条
浏览27990次