汇编语言 实验14 访问CMOS RAM

汇编语言 访问CMOS RAM


CMOS RAM

是什么?
存放计算机开机必备的一些数据的硬件,由BIOS(Basic input/output system)调用其数据。
怎么用?
首先要理解端口的概念,在计算机中,与CPU可以访问的数据的位置可以有一下三种:存储器、寄存器、端口。而端口的另一端是芯片,即CPU通过端口与其他芯片相连。在这些芯片中,都有一组可供CPU读写的寄存器。站在CPU的角度,CPU对这些寄存器统一编址。
那么怎么进行访问呢?首先要明白,CPU对于端口寄存器只有两种操作类型:in(从端口读取数据)、out(向端口输出数据)。
例如: in al,71h(从71h端口读取数据,放到寄存器al中)
      out 70h,al(将寄存器al中的数据传送到70h端口中)
      注:对端口的操作只能用al或者ax寄存器。 

输出时间程序

时间在CMOS RAM中的表示形式:
秒:在0号单元
分:2
时:4
日:7
月:8
年:9
思路:
这里可以用实验13(3)的思路,将用到的数据放在code块中,并通过offset进行访问,简单粗暴
源程序:
assume cs:code

code segment
index: db 9,8,7,4,2,0
string: db 'yy/mm/dd hh:mm:ss'

start:  mov ax,code
    mov ds,ax
    mov si,offset index
    mov bx,offset string
    mov cx,6
s:  push cx
    mov al,ds:[si]
    out 70h,al
    in al,71h
    mov ah,al
    mov cl,4
    shr ah,cl
    and al,00001111b
    add al,30h
    add ah,30h
    mov [bx],ah
    mov [bx+1],al
    inc si;最后一次循环后,指向string
    add bx,3
    pop cx
    loop s
    ;显示字符串
    mov ax,0b800h
    mov es,ax
    mov di,160*12+40*4
    mov cx,17
s0: mov al,ds:[si]
    mov es:[di],al
    add di,2
    inc si
    loop s0

ok: mov ax,4c00h
    int 21h

code ends
end start
自我总结
一开始的思路是,定义data段,将单元号放进去,然后再把‘\’和‘:’放进去(好蠢。。),然后在把从CMOS RAM中取出的al通过一个函数,直接变成:ah(高位)al(低位)。行得通,但是当我把“年”输出做好了之后,发现,还有五个要做,这样下去程序会非常长,所以必须要用循环。可是以当时的设计,做循环是不可能的,每个两位数中间都有'\'或者':'等字符。然后去瞄了一眼答案,瞬间恍然大悟。。世上那么多条路可以选,我偏偏选了最难走的那一条:( 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值