《汇编语言》- 读书笔记 - 第14章-实验14 访问 CMOS RAM
- 需求
- 完整代码
- 运行结果
需求
编程,以“年/月/日 时:分:秒”的格式,显示当前的日期、时间。
注意:CMOS RAM
中存储着系统的配置信息,除了保存时间信息的单元外,不要向其他的单元中写入内容,否则将引起一些系统错误。
完整代码
assume cs:code
data segmento db 9,8,7,4,2,0 ; 要读取的位置a db '2000/00/00 00:00:00$' ; 时间字符串模板
data endscode segmentstart: mov ax,data ; 设置数据段mov ds,axmov si,offset o ; [年月日时分秒]的位置mov bx,offset a ; 指向结果字符串add bx,2 ; 先跳过年 20 部分s: mov al,[si] ; [0,2,4,7,8,9]out 70h,al ; 设置要读取的位置in al,71h ; 从端口读数据到 almov ah,almov cl,4shr al,cl ; 得出十位的数值and ah,00001111b ; 得出个位的数值add ah,30h ; 个位转 ascii 码add al,30h ; 十位转 ascii 码mov [bx],ax ; 更新结果字符串inc si ; 下一个读取位置add bx,3 ; 下一个结果字符位置cmp si,6 ; 如果已经读完6个je ok ; 跳出循环 jmp s ; 否则继续; 调用21h中断的9号子程序,打印字符串ok: mov dx,offset amov ah,9h int 21hmov ax,4c00hint 21h
code ends
end start
注意:这里我是十位
在al
,个位
在ah
,这样写进内存才是 24 年。
因为写入内存后的顺序是:低位
在前,高位
在后。
此时写入的已经是字符串了。后面 int 21
可是按顺序逐个字节读来打印的。