汇编语言 实验14

;*********************************************************
;实验14:访问CMOS RAM
;以“年/月/日 时:分:秒”的格式,显示当前时间和日期
;*********************************************************

assume cs:code

code segment
start:
mov ax, 0b800h
mov es, ax
mov di, 160*12+30*2 ;显示在12行,30列
mov al, 0ah ;将al设为10,因为在CMOS RAM中,年月日时分秒的存放单元为9,8,7,4,2,0
push di

rdata:
dec al
cmp al, 7
jb rtime ;当al小于7时,说明年月日读取完毕,已经读到时分秒
call show ;将日期显示
add di, 6 ;XX/XX/XX X(2字节)X(2字节)/(2字节),一共要向后跳6字节
jmp short rdata ;回跳继续显示日期

rtime:
sub al, 2
cmp al, 0feh ;0000h - 2 = 0feh
je sign ;若al == 0feh 则跳到显示”/”, “:”
call show
add di, 6 ;XX:XX:XX X(2字节)X(2字节):(2字节),一共要向后跳6字节
jmp short rtime

sign: ;XX/XX/XX XX:XX:XX
pop di
add di, 4 ;XX/ X(2字节)X(字节),一共要向后跳4个字节
mov byte ptr es:[di], ‘/’

add di, 6          
mov byte ptr es:[di], '/'

add di, 12
mov byte ptr es:[di], ':'

add di, 6
mov byte ptr es:[di], ':'

mov ax, 4c00h
int 21h

show:
push ax
push cx

out 70h, al                 ;70h 为地址端口存放要访问的 CMOS RAM 单元的地址
in al, 71h                                  ;71h  为数据端口,存放从选定的 CMOS RAM 单元中读取的数据,或要写入到其中的数据

mov cx, 4
mov ah, al
shr ah, cl                  ;将ah置为0000XXXXh
and al, 0fh                 ;将al置为0000XXXXh

add ah, 30h                 ;转为对应的ascii码
add al, 30h                                 ;转为对应的ascii码

mov es:[di], ah             ;存入显存
mov es:[di+2], al

pop cx
pop ax
ret

code ends
end start

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值