cyousui 发表于 2013-1-23 14:07:38

16位汇编读取CMOS时间日期的学习总结程序

最近随手写的练习程序,给大家分享下,多谢大家的支持啊!
;******************************************
;      程序功能:读取CMOS时间并显示
;      CMOS读写方法如下:
;      1.向地址端口70H写入要访问的单元地址
;      2.从71H端口读出数据
;      注意:CMOS中存放的是BCD码
;      数码:         0         1    2    3    4
;      BCD码:0000 0001 0010 0011 0100
;      数码:         5         6    7    8    9
;      BCD码:0101 0110 0111 1000 1001
;      CMOS RAM中时间格式如下:
;      秒:00H
;      分:02H
;      时:04H
;      日:07H
;      月:08H
;      年:09H
;      BCD码转ASCII码:BCD + 30H = ASCII
;******************************************
assume cs:code,ds:data,ss:stack

stack segment
      db 16 dup(0)
stack ends

data segment
;格式: 年            月            日            时      分      秒
      db 0,0,'-',0,0,'-',0,0,' ',0,0,':',0,0,':',0,0,'运行效果图如下:
;CMOS端口号序列      
      db 09h,08h,07h,04h,02h,00h
data ends

code segment
start:      mov ax,stack      ;栈段初始化
                mov ss,ax
                mov sp,10h
               
                mov ax,data                ;数据段初始化
                mov ds,ax
               
                ;数据段偏移量如下:               
                ;         L      H
                ;年:0,      1
                ;月:3,      4
                ;日:6,      7
                ;时:9,      10
                ;分:12,13
                ;秒:15,16
                ;L->si      H->di               
                mov si,0
                mov di,1
                xor bx,bx
                mov bx,18
                mov cx,6
      s:      mov al,ds:
                out 70h,al
                in al,71h
                mov ah,al
                push cx
                mov cl,4
                shr ah,cl
                pop cx
                and al,00001111b
                add ah,30h
                add al,30h
                mov byte ptr ds:,ah
                mov byte ptr ds:,al
                inc bx
                add si,3
                add di,3
                loop s
               
                mov dx,offset ds:      ;设置字符串首地址
                call show
               
                mov ah,4ch                ;返回OS
                mov al,0h                ;返回值:0
                int 21h
;*********************
;      子程序:显示字符
;      入口参数:DS:DX=串首址
;      返回值:无
;*********************
show:      push ax
                mov ah,09h
                int 21h
                pop ax
                ret
code ends
end start
运行效果图如下:



609073410 发表于 2013-1-23 19:00:19

不错哦!学习中!做个沙发先!:P
页: [1]
查看完整版本: 16位汇编读取CMOS时间日期的学习总结程序