当这些寄存器位于内存空间时,就被称为 I/O 内存。
现实生活中,我们习惯将这些寄存器统称为 I/O 端口,而不管它们到底位于 I/O 空间还
是内存空间。本文出于叙述的流畅性,采用的是这种习惯说法。
二.I/O 端口的寻址硬件
对编程者来说,通常不考虑具体的 I/O 端口译码电路,他们只需要知道硬件设计者提
供的各个 I/O 端口的地址等信息就可以了。若想深入了解 I/O 端口地址的由来,那么请认真
阅读本节。
I/O 接口芯片在寻址方方面和存储器同样存在区别:CPU 的地址线 Am ~ An 经过译码
后,输出到 I/O 接口芯片的片选 CS。另外的地址线 Ae ~ Af 用来选择哪个端口。使用 CPU
的地址线的好处是,寻址 I/O 接口芯片无需用 CPU 的某些 I/O 管脚来虚拟输出地址。
例:某微机系统有 2 个 I/O 接口芯片,每个接口芯片占用 8 个端口地址。若起始地址为
9000H,2 个接口芯片的地址连续分布,用 74LS138 作译码器,请画出端口译码电路图,并
说明每个芯片的端口地址范围。
分析下表所列的地址分配情况,可知系统地址信号的译码情况为:
字选:A
2
~A
0
直接与接口芯片上的地址信号线连接以寻址每个接口芯片内部的 8 个端口;
片选:
A
5
~A
3
接 3-8 译码器输入端,译码器输出端分别作为 2 个接口芯片的片选信号;
A
15
~A
6
经门电路译码后形成 3-8 译码器的片选信号;
地址信号
A
15
A
1
4
A
13
A
1
2
A
11
A
1
0
A
9
A
8
A
7
A
6
A
5
A
4
A
3
A
2
A
1
A
0
第 1 个
I/O 接
口芯片
端口 1
1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
端口 2
1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1
…… 1 0 0 1 0 0 0 0 0 0 0 0 0 ……
端口 8
1 0 0 1 0 0 0 0 0 0 0 0 0 1 1 1
第 2 个
I/O 接
口芯片
端口 1
1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0
端口 2
1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1
…… 1 0 0 1 0 0 0 0 0 0 0 0 1 ……
端口 8
1 0 0 1 0 0 0 0 0 0 0 0 1 1 1 1
根据分析可画出 CPU 和 I/O 接口芯片的大概电路图: