第十四章 端口
在PC机系统中,和cpu通过总线相连芯片除各种寄存器外,还有以下3种芯片:
① 各种接口卡上的接口芯片,他们控制接口卡进行工作;
② 主板上的接口芯片,cpu通过他们对部分外设进行访问;
③ 其他芯片,用来存储相关的系统消息,或进行相关的输入输出处理。
从cpu的角度,将这些寄存器都当做端口,对他们进行统一编址从而建立了一个统一的端口地址空间,每一个端口在地址空间中都有一个地址。
cpu可以直接读写以下三个地方的数据:
① cpu内部的寄存器;
② 内存单元;
③ 端口
在PC系统中,cpu最多可以定位64KB个不同的端口,则端口地址的范围为0~65535
端口的读写指令只有两条:in和out。
在in和out指令中,只能使用ax或al来存放从端口中读入的数据或要发送到端口中的数据。
对0~255以内的端口进行读写时,可直接写出端口号。
对256~65535的端口进行读写时,端口号放在dx中。
CMOS RAM芯片,简称CMOS,有两个端口:
70h为地址端口,存放要访问的CMOS单元的地址
71h为数据端口,存放从选定的CMOS单元中读取的数据,或要写入的数据
CPU对CMOS RAM的读写分两步进行:
1、将N送入端口70h
2、从端口71h处读出N号单元内容
shl和shr是逻辑位移指令。
shl是逻辑左移指令,它的功能为:
① 将一个寄存器或内存单元中的数据向左移;
② 将最后移出的一位写入CF中;
③ 最低位用0补充。
shr是逻辑右指令,与shl相反。
如果移动位数大于1时,必须将移动位数放在cl中。
将X逻辑左移N位,相当于执行X=X*2^N
将X逻辑右移N位,相当于执行X=X/2^N
BCD码——4位2进制表示10进制数码,一个字节表示两个BCD码,两个BCD码表示两位的10进制数
BCD码+30h=10进制数对应的ASCII码
CMOS RAM存放着当前时间:每个信息长度1字节,以BCD码方式存放
时间存放单元:
秒 分 时 日 月 年
0 2 4 7 8 9
- [kanwangxue] 如果是文字的,不是特别好啊,体力活,如果文字还加点动画,那就必须顶了。 01/15 01:10
- [kanwangxue] 必须顶啊。 01/15 00:54
- [ltoiii] 既然是实现loop功能,是否要考虑s和se标号? mov bx,offset s - offset 12/09 12:09
- [xiaoyao2012] 正确 11/01 15:33
- [xuer2016] 又找到2条被我忽视的地方: 1.PUSH 和 POP 针对字单元 2.POP 不能是CS 10/26 10:57
- [xuer2016] 学习了 我书写不规范,16进制字母前不加0,后面不加H,以后要注意了。。。 10/26 10:51
- [xuer2016] 来老师这学习下 10/26 10:31
- [youthangel] 不妙,CPU的利用率一下子就上去了。还好我的处理器不是太弱,35%左右的利用率。建议博主在修改一下 10/20 08:23
- [fpamc] 在我心里她就是我的女神。 10/02 08:58
- [newpeople] 你女朋友用得了简直就是一个女神…… 10/01 08:10
- [99998888] 请您指点一下如何找到会ASSEMBLER 语言的翻译,翻译成中文或英文。我的QQ ; 9097815 07/25 09:56
- [jeremy] 我觉得你学习的挺好,可以加你扣扣吗?我的469614823 08/07 14:46
- [zhangbo0805] 哈哈, 你好呀!很希望认识你呀!我发现你学习的积极性很高!正想向您学习呢! 07/31 23:31
- [tomato] 知道了,排得还挺满。 05/29 16:35
- [tomato] 现在学习情况怎么样?在做课设二还是什么? 05/29 10:41
- [tomato] 你的留言收到了。 05/05 23:51
- [fpamc] 开始学习c咯! 05/03 21:40
- [fpamc] 居然不能发博客了……! 04/22 21:03
- [tomato] 你相册中的游戏界面我看过了,非常好,界面很漂亮,很有创造力。博主,很有潜力。加油,一定能把这个游戏做 04/20 23:46
- [fpamc] 忙了半个月,不在家,没时间学习汇编。 但是在途中想到了一个有史以来最难的程序。对于刚学完9章的我。 04/13 20:56