王爽《汇编语言》(第二版) 学习笔记 (第十四章 端口)

第十四章 端口

本章概述:

1.         各种存储器都和CPU的地址线、数据线、控制线相连。CPU在操作它们的时候,把它们都当做内存来对待,把它们总地看做一个由若干存储单元组成的逻辑存储器,这个逻辑存储器我们称其为内存地址空间。

2.         PC机系统中,和CPU通过总线相连的芯片除各种存储器外,还有以下3中芯片:

1)        各种接口卡(如网卡、显卡)上的接口芯片,它们控制接口卡进行工作;

2)        主板上的接口芯片,CPU通过它们对部分外设进行访问;

3)        其他芯片,用来存储相关的系统信息,或进行相关的输入输出处理。

在这些芯片中,都有一组可以由CPU读写的寄存器。这些寄存器,它们在物理上可能处于不同的芯片中,但是它们在以下两点上相同:

1)        都和CPU的总线相连,当然这种连接是通过它们所在的芯片进行的;

2)        CPU对它们进行读或写的时候都通过控制线向它们所在的芯片发出端口读写命令。

3.         CPU的角度,将这些寄存器都当做端口,对它们进行统一编址,从而建立了一个统一的端口地址空间。每一个端口在地址空间中都有一个地址。

4.         CPU可以直接读写以下3个地方的数据。

1)        CPU内部的寄存器;

2)        内存单元;

3)        端口。

 

一、             端口的读写

1.         在访问端口的时候,CPU通过端口地址来定位端口。因为端口所在的芯片和CPU通过总线相连,所以,端口地址和内存地址一样,通过地址总线来传送。

2.         PC系统中,CPU最多可以定位64KB个不同的端口,则端口地址的范围为0~65535

3.         对端口的读写不能用movpushpop等内存读写指令。端口的读写指令只有两条:inout,分别用于从端口读写数据和往端口写入数据。

4.         inout指令中,只能使用axal来存放从端口中读入的数据或要发送到端口中的数据。

5.         访问8位端口时用al,访问16位端口时用ax

6.         0~255以内的端口进行读写时:

in al20h             ;从20h端口读入一个字节

out   20hal          ;往20h端口写入一个字节

7.         256~65535的端口进行读写时,端口号放在dx中:

mov dx3f8h              ;将端口号3f8h送入dx

int aldx              ;从3f8h端口读入一个字节

out dxal             ;向3f8h端口写入一个字节

二、             CMOS RAM 芯片

1.         PC机中,有一个CMOS RAM芯片,一般简称CMOS。此芯片有以下特征:

1)        包含一个实时钟和一个有128个存储单元的RAM存储器(早期的计算机为64个字节)

2)        该芯片靠电池供电。所以,关机后期内部的实时钟仍可正常工作,RAM中的信息不丢失。

3)        128个字节的RAM中,内部实时钟占用0~0dh单元来保存时间信息,其余大部分单元用于保存系统配置信息,供系统启动时 BIOS程序读取。BIOS也提供了相关的程序,使我们可以在开机的时候配置 CMOS RAM中的系统信息。

4)        该芯片内部有两个端口,端口地址为70h71hCPU通过这两个端口来读写CMOS RAM

5)        70h为地址端口,存放要访问的CMOS RAM单元的地址;71h为数据端口,存放从选定的CMOS RAM单元中读取的数据,或要写入到其中的数据。

2.         CPUCMOS RAM的读写分两步进行,如读 CMOS RAM 2号单元:

1)        2送入端口70h

2)        从端口71h读出2号单元的内容。

三、             shlshr指令

1.         shl是逻辑左移指令,它的功能为:

1)        将一个寄存器或内存单元中的数据向左移位;

2)        将最后移出的一位写入CF中;

3)        最低位用0补充。

2.         shr是逻辑右移指令,它和shl所进行的操作刚好相反。

1)        将一个寄存器或内存单元中的数据向右移位;

2)        将最后移出的一位写入CF中;

3)        最高位用0补充。

3.         如果移动位数大于1时,必须将移动位数放到cl中。如果只移动一位,则可以直接写出来。

4.         X逻辑左移一位,相当于执行X=X*2,将X逻辑右移一位,相当于执行X=X/2

四、             CMOS RAM        中存储的时间信息

1.         CMOS RAM中,存放着当前的时间:年、月、日、时、分、秒。这6个信息的长度都为1个字节,存放单元为:

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

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

2.         一个字节可表示两个BCD码。则CMOS RAM存储时间信息的单元中,存储了用两个BCD码表示的两位十进制数,高4位的BCD码表示十位,低4位的BCD码表示个位。

3.         BCD码值=十进制数码值,则BCD码值+30h=十进制数对应的ASCII码。

4.         显示(ah)+30h(al)+30h对应的ASCII码字符

assume cscode

code        segment

start     mov al8

              out   70hal

              in    al71h

 

              mov ahal

              mov cl4

              shr   ahcl

              and  al00001111b

 

              add  ah30h

              add  al30h

 

              mov bx0b800h

              mov esbx

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

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

 

              mov ax4c00h

              int   21h

code        ends

end         start

实验14 访问CMOS RAM

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值