📄 一句话概括
I/O 接口同样挂上数据和地址总线,但它认的是另一套门牌【端口号】,外设都从它的门进出。
📝 本节和前面几节的关系
内存接好了,这一节把门房 I/O 也挂上总线——注意它的门牌体系跟内存不一样。
一、I/O 的接线与门牌
I/O 接口照内存的样子接上数据总线和地址总线——但 CPU 访问它时用的编号叫端口号,Z80 有 256 个(0x00~0xFF)。 内存地址和端口号是两套独立体系:地址 0x02 是内存里的一个字节,端口 2 是某个外设的门——号码可能撞,空间不重叠。
二、外设怎么挂上来
键盘(本章用拨码开关代替)接在输入接口的引脚上;LED 数码管接在输出接口的引脚上。 I/O 芯片内部有几个【寄存器】格子:数据存一格、状态存一格,每个格子对外占一个端口号。CPU 摸外设=读写这些格子。
三、为什么要门房
外设的电信号脾气古怪(电压、时序都跟 CPU 合不来),不能直接怼上总线。 I/O 接口干的正是【翻译加缓冲】的活:一头对内说总线听得懂的话,一头对外迁就设备的怪脾气。现代显卡、网卡里的芯片,本质还是这个角色。
四、动手 Demo:两套门牌对照表
把内存地址和端口号摆在一起看,两套体系的分工一目了然。
# 内存空间 vs I/O 空间
print("内存空间: 0x0000 ~ 0xFFFF, 共 65536 格")
print("I/O 空间: 0x00 ~ 0xFF, 共 256 格")
print("号码会撞(都有 2 号), 空间不重叠(两套体系)")
实跑输出:
--------------------------------------------------------------------
接上 I/O——端口号是另一套门牌
--------------------------------------------------------------------
I/O 接口也挂在总线上,但它的门牌叫【端口号】,跟内存地址是两套体系:
体系 门牌叫什么 范围(Z80) 谁住在里面
-----------------------------------------------------------------
内存空间 内存地址 0x0000~0xFFFF 程序和数据
I/O 空间 端口号 0x00~0xFF 键盘、数码管等外设
同一条地址总线,怎么区分这趟点名的是内存还是 I/O?
——CPU 专门伸出一根控制线来表态,这正是 2.6 节的内容。
先记住分工:想读程序数据,按内存地址找;想摸外部设备,按端口号找。
【⚠️ 2026 现状】x86 后来的现代设备改走 MMIO(把设备寄存器映射进内存地址空间),端口号体系淡出,但【给设备编门牌】的思想没变。 两套门牌的判定开关,就是下一节的主角——MREQ 和 IORQ 两根引脚。
30 秒实验
- 把家里路由器的 LAN 口想成端口号:每个口一个号,插哪个口就是找哪台设备。
- 数一数 256 个端口号能接多少设备——不够用怎么办?一块 I/O 芯片后面可以挂多个外设。
常见误区
- 以为端口号和内存地址共享一套编号——号码可以相同,但访问时靠控制线分流,互不干扰。
- 以为外设直接插总线——中间必须过 I/O 接口做电平与时序的翻译。
自测三问(点开对答案)
1. 端口号和内存地址是什么关系? —— 两套独立体系:Z80 有 256 个端口、64K 个内存地址,号码可撞、空间不重叠。 2. I/O 接口芯片内部是什么? —— 几个寄存器格子,数据一格状态一格,每格占一个端口号。 3. I/O 接口存在的理由是什么? —— 翻译加缓冲——让脾气不同的外设和总线能对话。- ☐ 下一节(2.5 连接时钟信号)
相关笔记
- 输入、运算、输出是硬件的基础 — 三件套的骨架总纲
- 23 课 2.5.9 向集线器发送网络包 — 那边是网络世界的【接口】,同为翻译缓冲角色
- 💻 计算机是怎样跑起来的 · 索引