鱼C论坛

 找回密码
 立即注册
查看: 3258|回复: 1

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

[复制链接]
发表于 2013-1-23 14:07:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
最近随手写的练习程序,给大家分享下,多谢大家的支持啊!
;******************************************
;        程序功能:读取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:[bx]
                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:[si],ah
                mov byte ptr ds:[di],al
                inc bx
                add si,3
                add di,3
                loop s
                
                mov dx,offset ds:[0]        ;设置字符串首地址
                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
运行效果图如下:

运行结果

运行结果


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-1-23 19:00:19 | 显示全部楼层
不错哦!学习中!做个沙发先!:P
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 15:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表