学习汇编的时候遇到的一个问题

279 天前
 dududupapapa
是关于 IN/OUT 指令的。假如 cpu 要向某个外部设备发送指令,就用 “OUT 端口号,寄存器” ,这样的指令。cpu 与显卡通信使用的是 PCI 通讯针脚,与其它外设通信使用的是南桥数据引脚,发送指令都是用的 OUT 。我的问题是,cpu 是怎么单凭端口号知道哪些数据要发到 PCI 针脚,哪些数据要发到南桥数据引脚的呢?
1543 次点击
所在节点    程序员
8 条回复
kljsandjb
279 天前
CPU 应该不用知道的,只需要去写端口就行,至于逻辑是由程序决定的,例如驱动。之前写过一次模拟器,就知道 CPU 的指令都是通用的,具体行为随硬件而定
test0x01
279 天前
我的理解是这两条指令会产生中断,由中断处理器去处理。
mantouboji
279 天前
看来你没有学过计算机体系结构和计算机组成原理两门基础课。

IN/OUT 这是 8086 实模式下的东西都是四五十年前的了,没有必要了解。

简单滴说,I/O 处理分 独立 I/O 和 存储器映射 I/O 两大类。像 8086 这种体系结构提供了独立 I/O 的指令,把 I/O 设备放在了独立的地址空间,在执行 in/out 指令的时候,有一个专门的管脚( 8086/8088 是 PIN26 )指示本次操作地址总线上输出的是内存地址还是 I/O 端口地址,外围地址译码电路会根据这个信号去译码。

https://www.tutorialspoint.com/microprocessor/microprocessor_8086_pin_configuration.htm

存储器映射模式就是把 I/O 设备占用的地址空间统一编码在内存空间里,访存和访 I/O 统一处理。PCI 总线设备都是这样的。68000 类、各种 RISC 体系都是这样。
tek
278 天前
使用端口号的一部分来决定去向。类似于电话号码使用区号决定如何中转,南北桥则类似于路由的角色
dududupapapa
278 天前
@tek 嗯。。。南桥是一个路由,北桥也是一个路由,但是 cpu 是怎么通过端口号知道要选择这两个路由中的哪一个的呢
dududupapapa
278 天前
@tek 我看到有个说法是,南北桥都有特定的端口范围,在哪个范围内,就发送给哪个桥,不知道是不是这样
tek
278 天前
是的,根据端口号范围,桥决定把消息转给那个设备。比如说会把 0x100-0x10f 间的访问都转给设备 A. 0x110-0x11f 转给设备 B. 设备 A 自己解释低 4 位的 0x0-0xf 16 个地址的意义
tek
278 天前
南桥有时会被看做北桥的一个设备。类似于一个省级的分拣中心,由省再分发到市

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/976502

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX