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

论坛 期权论坛 脚本     
匿名技术用户   2021-1-16 08:07   213   0
;***************************************
; 程序功能:读取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               ;调用21号中断
;*********************
; 子程序:显示字符
; 入口参数:DS:DX=串首址
; 返回值:无
;*********************
show: push ax
  mov ah,09h
  int 21h
  pop ax
  ret
code ends
end start

运行效果图如下:


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP