作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
据我所知,这是 PC 总线系统的简化 View (它不包括我知道的桥)。
如这张图片所示:
据我所知,我们在现代 x86 CPU 中有 65536 字节(0000-FFFF)的地址空间。这些是 I/O 地址。在 x86 中,IN 和 OUT 指令用于通过 I/O 端口与设备通信。
考虑到 PC(x86 cpu),以下是我的问题:
最佳答案
1) Can I add a device to this I/O bus without using PCI or any other bus?
If yes how are I/O addresses assigned? Don't they conflict?
2-) If my CPU supports PCI and I²C (yes some do!), how does the cpu differentiate between their I/O addresses? How does it know that an I/O address belongs to PCI or I²C.
out dx,al
指令)CPU 在共享总线或链接上发送一条消息“
command = WRITE, space = IO port space, address = 0x1234, size = 1 byte, data = 0x56
”。该消息可能被 PCI 主机 Controller 拦截,它查看详细信息(在哪个地址空间中的哪个地址)并决定将消息转发到 PCI 总线上的“PCI 到 LPC 桥接器”设备。当“PCI 到 LPC 桥接器”收到消息时,它可能会查看详细信息(地址空间中的哪个地址)并意识到它对应于 I²C 总线 Controller 并将其转发给 I²C 总线 Controller 。 I²C 总线 Controller 可能会解码消息并在 I²C 总线上发送字节 0x56(来自消息的“数据”部分)。然后,可能正在监听 I²C 总线的设备看到 0x56 字节并通过将字节 0x78 通过 I²C 总线发送回 I²C 总线 Controller 来响应,其中 Controller 将值 0x78 存储在内部缓冲寄存器中。
in al,dx
指令)CPU 可能会发送另一条消息“
command = READ, space = IO port space, address = 0x1234, size = 1 byte
”。此消息将遵循与前一个相同的路径(因为地址和地址空间相同)并最终到达 I²C 总线 Controller 。 I²C 总线 Controller 可能会解码该消息并意识到该消息要求从 I²C 总线 Controller 的内部缓冲寄存器(其保持之前的值 0x78)读取;所以 I²C 总线 Controller 发回消息“
command = READ_REPLY, space = IO port space, address = 0x1234, size = 1 byte, data = 0x78
”。该回复消息将返回到 CPU(再次使用相同的路径,但方向相反——例如,到 PCI 到 LPC 桥,然后到 PCI 主机 Controller ,然后到 CPU)。当 CPU 收到回复时,它可以完成导致它的原始指令(例如,将
al
设置为“READ_reply”消息中的值以完成
in al,dx
指令)。
command = READ
”消息将被转发到什么地方,也不知道哪个设备会发回“
command = READ_REPLY
"消息。路由主要取决于消息所采用路径中每一步的逻辑。例如,PCI 主机 Controller 可能被配置为将 0x0000 到 0x2000 范围内的 IO 端口访问的所有消息转发到 PCI 总线,而 PCI 到 LPC 桥可能被配置为转发 0x1234 范围内的 IO 端口访问的所有消息到 0x1235 到 I²C 总线 Controller 。
关于assembly - 关于x86 I/O口地址和IN/OUT指令的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56656650/
我是一名优秀的程序员,十分优秀!