博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
端口02 - 零基础入门学习汇编语言68
阅读量:4952 次
发布时间:2019-06-11

本文共 1181 字,大约阅读时间需要 3 分钟。

第十四章:端口02

 

让编程改变世界

Change the world by program


 

CMOS RAM中存储的时间信息

 

在CMOS RAM中,存放着当前时间:

秒:00H

分:02H

时:04H

日:07H

月:08H

年:09H

这6个信息的长度长度都为1个字节。  

这些数据以BCD码的方式存放:

数码: 0 1 2 3 4
BCD码:0000 0001 0010 0011 0100  
数码: 5 6 7 8 9
BCD码:0101 0110 0111 1000 1001  
例如:数值26,用BCD码表示为:0010 0110 可见,一个字节可表示两个BCD码。则CMOS RAM存储时间信息的单元中,存储了用两个 BCD码表示的两位十进制数,高 4 位的BCD码表示十位,低4 位的BCD 码表示个位。 比如:00010100b表示14。  

课堂作业:

 

编程:在屏幕中间显示当前的月份。

这个程序主要做两部分工作:  

(1)从CMOS RAM的8号单元读出当前月份的BCD码;(回忆一下)

CMOS RAM芯片回顾:

70h为地址端口,存放要访问的CMOS RAM单元的地址;

71h为数据端口,存放从选定的CMOS RAM 单元中读取的数据,或要写入到其中的数据。

 

要读取 CMOS RAM的信息,我们首先要向地址端口70h写入要访问的单元的地址:

mov al,8

out 70h,al

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

in al,71h

 

(2)将用BCD码表示的月份以十进制的形式显示到屏幕上。

提示:我们可以看出 ,BCD 码值=十进制数码值,则BCD码值+30h=十进制数对应的ASCII码。  

源码分析

 
我们需要进行两步工作:

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

mov ah, al ; al中为从CMOS RAM的 8号单元

; 读出的数据

mov cl, 4

shr ah, cl ; ah中为月份的十位数码值

and al, 00001111b ; ah中为月份的个位数码值

 

(2)显示(ah)+30h 和 (al)+30 对应的ASCII码字符。

 
程序源代码:  

实验十四

  编程:以“年/月/日 时:分:秒”的格式,显示当前日期和时间。 注意:CMOS RAM 中存储着系统的配置信息,除了保存时间信息的单元外,不要向其他的单元中写入内容,否则将引起一些系统错误的~ [buy]   [/buy] [Downlink href='http://kuai.xunlei.com/d/LIWNJVVTFTWY']视频下载[/Downlink]

转载于:https://www.cnblogs.com/LoveFishC/archive/2011/05/17/3847067.html

你可能感兴趣的文章
zoj 1649 Rescue (BFS)(转载)
查看>>
371. Sum of Two Integers java solutions
查看>>
2124: 等差子序列 - BZOJ
查看>>
3529: [Sdoi2014]数表 - BZOJ
查看>>
字符串匹配算法综述
查看>>
Linux centosVMware shell 管道符和作业控制、shell变量、环境变量配置文件
查看>>
在程序被送入后台时,向 iOS 借点时间,来完成一个长期任务
查看>>
【设计模式】工厂模式
查看>>
两个表格中数据不用是一一对应关系--来筛选不同数据,或者相同数据
查看>>
前端之路
查看>>
javascript 继承
查看>>
String类型转int类型方法
查看>>
关于渲染引擎设计,Scene Management的文章
查看>>
oracle 使用leading, use_nl, rownum调优
查看>>
客户数据库出现大量cache buffer chains latch
查看>>
機械の総合病院 [MISSION LEVEL: C]
查看>>
实战练习细节(分行/拼接字符串/字符串转int/weak和copy)
查看>>
Strict Standards: Only variables should be passed by reference
查看>>
hiho_offer收割18_题解报告_差第四题
查看>>
AngularJs表单验证
查看>>