V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dududupapapa
V2EX  ›  程序员

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

  •  
  •   dududupapapa · 2023-09-23 18:05:07 +08:00 · 1656 次点击
    这是一个创建于 411 天前的主题,其中的信息可能已经有所发展或是发生改变。
    是关于 IN/OUT 指令的。假如 cpu 要向某个外部设备发送指令,就用 “OUT 端口号,寄存器” ,这样的指令。cpu 与显卡通信使用的是 PCI 通讯针脚,与其它外设通信使用的是南桥数据引脚,发送指令都是用的 OUT 。我的问题是,cpu 是怎么单凭端口号知道哪些数据要发到 PCI 针脚,哪些数据要发到南桥数据引脚的呢?
    8 条回复    2023-09-25 07:06:42 +08:00
    kljsandjb
        1
    kljsandjb  
       2023-09-23 19:09:30 +08:00 via Android   ❤️ 1
    CPU 应该不用知道的,只需要去写端口就行,至于逻辑是由程序决定的,例如驱动。之前写过一次模拟器,就知道 CPU 的指令都是通用的,具体行为随硬件而定
    test0x01
        2
    test0x01  
       2023-09-23 21:42:14 +08:00 via Android
    我的理解是这两条指令会产生中断,由中断处理器去处理。
    mantouboji
        3
    mantouboji  
       2023-09-24 13:41:06 +08:00   ❤️ 2
    看来你没有学过计算机体系结构和计算机组成原理两门基础课。

    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
        4
    tek  
       2023-09-24 17:29:48 +08:00   ❤️ 1
    使用端口号的一部分来决定去向。类似于电话号码使用区号决定如何中转,南北桥则类似于路由的角色
    dududupapapa
        5
    dududupapapa  
    OP
       2023-09-24 18:10:35 +08:00
    @tek 嗯。。。南桥是一个路由,北桥也是一个路由,但是 cpu 是怎么通过端口号知道要选择这两个路由中的哪一个的呢
    dududupapapa
        6
    dududupapapa  
    OP
       2023-09-24 18:17:45 +08:00
    @tek 我看到有个说法是,南北桥都有特定的端口范围,在哪个范围内,就发送给哪个桥,不知道是不是这样
    tek
        7
    tek  
       2023-09-25 07:01:45 +08:00   ❤️ 1
    是的,根据端口号范围,桥决定把消息转给那个设备。比如说会把 0x100-0x10f 间的访问都转给设备 A. 0x110-0x11f 转给设备 B. 设备 A 自己解释低 4 位的 0x0-0xf 16 个地址的意义
    tek
        8
    tek  
       2023-09-25 07:06:42 +08:00
    南桥有时会被看做北桥的一个设备。类似于一个省级的分拣中心,由省再分发到市
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5370 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 08:57 · PVG 16:57 · LAX 00:57 · JFK 03:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.