汇编语言CMOS RAM中存储的时间信息

秒:0 分:2 时:4 日:7 月:s 年:9

这些数据以BCD码的方式存放。
BCD码是以4位二进制数表示十进制数码的编码方法,如下所示。

十进制数码:  0     1     2   3    4     5    6   7     8   9
对应的BCD码:0000 0001 0010 0011 0100 0101 0110 0111 1000 1001

比如,数值26,用BCD码表示为:0010 0110< 可见,一个字节可表示两个BCD码。则CMOS RAM存储时间信息的单元中,存储了用两个BCD码表示的两位十进制数,高4位的BCD码表示十位,低4位的BCD码表示个位。比如,OOOlOl00b表示14 编程,在屏幕中间显示当前的月份。 分析,这个程序主要做以下两部分工作。 (1)从CMOS RAM的8号单元读出当前月份的BCD码。 要读取CMOS RAM的信息,首先要向地址端口70h写入要访问的单元的地址:

mov al,8
out 70h,a1

然后从数据端口71h中取得指定单元中的数据:

in al,71h

(2)将用BCd码表示的月份以十进制的形式显示到屏幕上。
我们可以看出,BCD码值=十进制数码值,则BCD码值++30h二十进制数对应的ASCII码。
从CMOS RAM的8号单元读出的一个字节中,包含了用两个BCD码表示的两位十进制数,高4位的BCD码表示十位,低4位的BCD码表示个位。比如,000l0l00b表: 14
我们需要进行以下两步工作。

(1)将从CMOS RAM的8号单元中读出的一个字节,分为两个表示BCD码值的数据

mov ah,al           ;al中为从CMOS RAM的 8 号单元中读出的数据
mov c1,4
shr ah,cl           ;ah中为月份的十位数码值
and al,000llllb    ;al中为月份的个位数码值

(2)显示(ah)+30h和(al)+30h对应的ASCII码字符
完整的程序如下

assume cs:code
code segment
start:mov al,8
  out 70h,a1
  in al,71h

  mov ah,al           
  mov c1,4
  shr ah,cl           
  and al,000llllb 

  add ah,30h
  add al,30h

  mov bx,0b800h
  mov es,bx
  mov byte ptr es:[160*12+40*2],ah   ;显示月份的十位数
  mov byte ptr es:[160*12+40*2+2],al ;接着显示月份的十位数码

  mov ax,4c00h
  int 21h

code ends
end start

发布日期:

所属分类: 编程 标签:  


没有相关文章!