对z80芯片的IN/OUT架构感到困惑

电器工程 输出 引脚 引出线 z80
2022-01-08 06:53:17

我正在阅读手册,它有点复杂。我一生都无法理解机器代码编码,但这不是我主要关心的问题……我主要关心的是地址/数据总线

我不明白 OUT 指令中的“地址输出”与端口配置之间的区别,以及寄存器数据操作数的参与。

直接引用自z80手册:

寄存器 C 的内容放在地址总线的下半部分(A0 到 A7),以选择 256 个可能端口之一的 I/O 设备。

提问时间:

1.“下半部分”是什么意思?

2. 256 个可能的端口在哪里/是什么,它是如何选择一个的,它到底从那里去哪里?

下一个报价:

如果寄存器 C 的内容为 01H,而寄存器 D 的内容为 5AH,则在执行 OUT (C) 时,将 D 字节 5AH 写入映射到 I/O 端口地址 01H 的外围设备。

因此,如果我在寄存器 C 中有 1,在 D 中有 90,并且我写 OUT(C),则 D 90 被写入映射到 1 的东西?我怎么知道 1 映射的是什么?

PS:另外,如果我在映射地址 1 有硬件,那么 90(表示的值)在那个硬件中去哪里?

不要因为我的困惑而误会我的意思,我是一名程序员......我只是在这个低级别编码的经验非常有限,只需要一些澄清。

4个回答

Z80 的地址总线为 16 位宽(位 A0 到 A15),这意味着它可以寻址 65536 个位置。总线的低 8 位为 A0-A7 位,可寻址 256 个位置。连接到 Z80 的每个 I/O 端口都有一个对应的地址 0-255(总共 256 个地址)。只有一个端口响应特定地址。

If the contents of register C are 01H, and the contents of register D are 5AH, at
execution of OUT (C),D byte 5AH is written to the peripheral device mapped to I/O port
address 01H.

外围设备 (01) 的地址将放置在地址总线 A0-A7 上。D 寄存器的内容会放在 8 位数据总线上,写入端口号为 01 的外设。

IN包含 I/O 地址的和指令版本OUT只允许在指令中指定地址的低 8 位。出于这个原因,大多数基于 Z80 的 I/O 硬件会忽略底部 8 位以外的任何地址位,并且在大多数情况下,程序员并不担心处理器对高 8 位的处理。实际上,Z80 将 BC 输出为地址(例如LD A,(BC)),但如果硬件不关心高地址位,则程序员没有理由关心 B 寄存器包含的内容。顺便说一句,我不认为OUT nn,A总是在高地址位上输出零。我隐约记得它输出I价值,但我不确定。重要的是,如果 I/O 解码硬件关心高地址位,代码应该始终使用OUT (BC),r指令的形式并确保B被适当地加载。

编辑——关于寻址的进一步说明:当代码执行类似LD (BC),A或的指令时OUT (C),A,Z80 并不真正关心 BC 中的地址“意味着”什么。Z80 用 BC 寄存器的内容驱动地址总线,将 A 寄存器的内容放到数据总线上,并断言指示“内存写入”或“I/O 写入”的信号组合。每个内存或设备都需要与硬件连接,以让它知道它应该对任何给定的请求做什么(如果有的话);它必须以这样一种方式这样做,即它将忽略任何指向其他设备的请求,但这并不意味着它一定会忽略指向所有“未使用”地址的请求。例如,如果系统中仅有的 I/O 设备是两个 UART 芯片,每个芯片有四个 I/O 地址,系统设计人员可能会设计一些东西,以便地址位 7 为低的任何 I/O 请求都将访问第一个芯片,使用地址位 0-1 来选择一个功能,而地址位 7 为高的任何请求都将访问第二个芯片。设计者可能会指定第一个芯片使用地址 00h-7Fh,第二个使用 80h 到 0FFh,但实际上第一个芯片将响应地址 04h、08h、0Ch、10h、... 7Ch,就像它会00小时;它同样会响应 05h 等,就像响应 01h 一样。让芯片忽略对 04h-7Fh 范围内地址的写入将需要更多的硬件,而不是简单地让这些地址“遮蔽”指定地址的功能。设计者可能会指定第一个芯片使用地址 00h-7Fh,第二个使用 80h 到 0FFh,但实际上第一个芯片将响应地址 04h、08h、0Ch、10h、... 7Ch,就像它会00小时;它同样会响应 05h 等,就像响应 01h 一样。让芯片忽略对 04h-7Fh 范围内地址的写入将需要更多的硬件,而不是简单地让这些地址“遮蔽”指定地址的功能。设计者可能会指定第一个芯片使用地址 00h-7Fh,第二个使用 80h 到 0FFh,但实际上第一个芯片将响应地址 04h、08h、0Ch、10h、... 7Ch,就像它会00小时;它同样会响应 05h 等,就像响应 01h 一样。让芯片忽略对 04h-7Fh 范围内地址的写入将需要更多的硬件,而不是简单地让这些地址“遮蔽”指定地址的功能。

  1. 之所以称为“下半部”,是因为这 8 条地址线是 16 条地址线中的低 8 条。

  2. 端口是什么取决于您的系统,它可以是任何东西。您的系统中有一些逻辑硬件可以为地址选择端口。通常地址的高位有一些解码器,其输出到实现 I/O 的芯片的片选输入 (CS)。低位直接进入芯片以选择每个寄存器中的几个寄存器之一。

硬件对您写入某个端口的值的作用是任意的。它可以存储该值,但也可能导致一些任意操作。

因此,您需要阅读硬件文档以了解端口的作用。

通常,一些地址线将进入一些逻辑,该逻辑将根据地址产生芯片选择信号,然后用于启用或选择输入或输出设备。

当输出设备接收到芯片选择信号和 I/O 写入信号时,数据总线上的数据将被写入该输出设备 - 设备对数据的处理取决于特定设备。

系统设计人员将决定哪些 I/O 地址对应于哪些 I/O 设备。如果程序员写入一个未使用的 I/O 地址,写入的数据将刚好落入位桶。