香港盈晟餐饮集团:I/O端口的寻址方式
来源:百度文库 编辑:偶看新闻 时间:2024/05/02 13:38:12
CPU端口的寻址方式一般有两种:一种是I/O地址与存储器地址统一编址,另一种是I/O端口地址与存储器地址分别独立编址。
1. I/O端口和存储器统一编址方式
在这种编址方法中,把一个外设端口作为存储器的一个单元来对待,故每一个外设端口占有存储器的一个地址。从外部设备输入一个数据,作为一次存储器读的操作;而向外部设备输出一个数据,则作为一次存储器的写操作。
这种方式的优点是:
(1) CPU对外设的操作可使用全部的存储器操作指令,故指令多,使用方便,可对外设中的数据(存于外设的寄存器中)进行算术和逻辑运算,进行循环或移位等。
(2) 内存和外设的地址分布是统一的。
(3) 不需要专门的输入输出指令以及区分是存储器还是I/O操作的控制信号。
这种方式的缺点是:
(1) 外设占用了内存单元,使内存容量减小。
(2) 要寻址的外设的端口地址,显然比内存单元的地址要少得多。所以,在用直接寻址方式寻址外设时,它的地址字节,通常总是要比寻址内存单元的地址少一个字节,因而节省了指令的存储空间,缩短了指令的执行时间。
2. I/O和存储器分别独立编址方式
在这种编址方法中,内存地址空间和I/O端口是相互独立的,各自有自己独立的地址空间。用于内存和用于I/O端口的操作指令是不一样的,需要有专门的I/O指令。
8086/8088CPU就是采用这种方式,其内存地址范围为00000~FFFFFH共1MB,I/O端地址的范围为0000~FFFFH。它们相互独立,互不影响。CPU访问内存和外设时,使用不同的控制信号加以区分。
8086/8088CPU中,I/O端口寻址方式有直接寻址和间接寻址两种,直接寻址方式时地址范围为0~255,间接寻址方式时地址范围为0~FFFFH。在第2章I/O指令中已介绍。
4.3.2 I/O端口地址分配
PC系列微机系统支持的端口数目是1024个,其端口地址空间是从000~3FFH,由地址线A0~A9进行译码。
PC系列微机中的I/O接口电路大体上分为两类:
1. 主板上的I/O接口芯片
这些芯片大多都是可编程的大规模集成电路,完成相应的接口操作,如定时器/计算器、中断控制器、并行接口、DMA控制器以及键盘控制器等。
2. 扩展槽上的I/O接口控制卡
这些接口控制卡是由若干个集成电路按一定的逻辑功能组成的接口部件,如多功能卡、图形卡、串行通信卡、网络接口卡等。
PC系列微机中的I/O端口地址空间也分为两部分,即1024个端口的前256个端口(0~0FFH)专供I/O接口芯片使用,后768个端口(100H~3FFH)为I/O接口控制卡使用。如表4-1和表4-2所示。表中“—”符号表示该微机中无对应的接口芯片或接口卡。用户设计I/O接口电路时,应使用系统未占用的端口地址区域,如表4-2中画有“△”符号的行所对应的范围。
表4-1主板上接口芯片的端口地址
I/O接口器件名称
PC/XT
PC/AT
DMA控制器1
000~01FH
000~01FH
中断控制器1
020~021H
020~021H
定时器
040~043H
040~05FH
并行接口芯片
060~063H
—
键盘控制器
—
060~06FH
RT/CMOS RAM
—
070~07FH
DMA页面寄存器
080~083H
080~09FH
中断控制器2
—
0A0~0BFH
NMI屏蔽寄存器
0A0~0BFH
—
DMA控制器2
—
0C0~0DFH
协处理器
—
0F0~0FFH
表4-2扩展槽上接口控制卡的端口地址
I/O接口卡名称
PC/XT
PC/AT
游戏控制卡
200~20FH
200~20FH
扩展器/接收器
210~21FH
-
△
220~26FH
220~26FH
并行控制卡2
270~27FH
270~27FH
△
280~2EFH
280~2EFH
串行控制卡2
2F0~2FFH
2F0~2FFH
试验卡
300~31FH
300~31FH
硬盘控制卡
320~32FH
1F0~1FFH
△
330~36FH
330~36FH
并行口控制卡1
370~37FH
370~37FH
同步通信卡2
380~38FH
380~38FH
△
390~39FH
390~39FH
同步通信卡1
3A0~3AFH
3A0~3AFH
单显DMA
3B0~3BFH
3B0~3BFH
彩显示EGA/VGA
3C0~3CFH
3C0~3CFH
彩显CGA
3D0~3DFH
3D0~3DFH
△
3E0~3EFH
3E0~3EFH
软盘控制卡
3F0~3F7H
3F0~3F7H
串行控制卡1
3F8~3FFH
3F8~3FFH
在选定I/O端口地址时要注意:
(1) 凡是被系统配置占用了的端口地址一律不能使用。
(2) 从原则上讲,未被系统占用的地址,用户都可以使用;但计算机厂家申明保留的地址,不要使用,以免发生I/O端口地址的重叠和冲突,而造成所设计的产品与系统不兼容。
(3) 通常,用户可使用300H~31FH,这是PC系列微机留作实验卡用的。在用户可用的I/O地址范围内,为了避免与其他用户开发的接口控制卡发生地址冲突,最好采用地址开关。
4.3.3 I/O端口地址译码原则
8086本来有16位的数据线,为了在进行字节存取时,不改变其它字节的内容,8086采用了
⑴A0与
8086CPU把16位数据的低8位D7~D0分配在偶数地址,即A0=0的地址,高8位数据D8~D15分配给奇数地址,用
表4-3 A0与
A0
传送数据位
0
0
16位数据总线上进行传送
0
1
低8位数据总线上进行字节传送
1
0
高8位数据总线上进行字节传送
1
1
无效
对于I/O地址译码电路的片选信号,必须有A0和
4.3.4 I/O端口地址译码方法
1. 用门电路组成的译码电路
用各种基本门电路作译码器是常用的方法。如上面介绍的简化A0与
要选中这个地址,将是1的地址线接与门或与非门的输入;将是0的地址线接或非门的输入,最后以与非门的输出作为片选信号,如图4.9所示。
2. 用译码器构成译码电路
上例中共用到地址信号15个,那么可以寻址的I/O端口可达32K,在一般的微机系统中不可能用到这么多的设备,一般都不进行全译码。例如在IBM PC/XT/AT机中它只用10根地址线(A9~A0)。若高6位地址线抛开不管,这样它们可以寻址的I/O空间也达1KB,这不仅足够目前实用,而且为以后的发展和扩充也留下了足够的余地。为了问题简化,通常用10根地址线参与地址译码。
例如:一个接口电路,有16个I/O端口,有8个接数据总线的D7~D0,有8个接数据总线的D15~D8 ,要求既能按字节访问,也能按字访问,端口地址为 210H~21FH。试设计一个译码电路。
首先确定这个译码器不能采用化A0与
对于16个地址状态,A9~A4是不变量的,可门电路作为高地址译码,A0要作为选控制信号,不能作为3~8译码器的输入,那么接3~8译码器的输入地址应为A3A12A1,其译码电路如图4.10所示。
3. 与大规模集成电路相连的译码电路
设计这样的译码电路,可从三级考虑。根据片内寄存器的数量来确定用片内寄存器的地址选择线,用次高位地址作为片选控制信号,剩下的高位地址线决定各芯片所占的地址空间。
为解决相互间负载驱动问题,一般总线和接口电路之间加一个双向数据驱动电路,对于系统数据总线来说,只相当负载一个门的输入,这样负担就轻多了。