8086是一个16位微处理器,具有20位地址总线,这意味着它最多可以访问2^20字节的数据。所以我的问题是,如果内存存储在微处理器外部,因此位置说1000H(起始地址)在8086外部,但地址1000作为偏移量存储在8086的寄存器中,如果是这种情况,那么如何8086中的分段是否起作用,它是否以分段方式读取外部存储器,或者外部存储器实际上是分段的?
逻辑段:到20位线性地址计算(
base + offset
,其中base = seg<<4
)发生在8086内部。外部物理地址总线信号是线性的,所以它只需20位宽,而不是32!
请参阅 https://thestarman.pcministry.com/asm/debug/Segments.html,了解有关分段寻址以及不同逻辑地址如何与同一线性地址重叠的更多讨论。
CPU 外部的地址解码通常安排为 DRAM 响应最低地址,ROM 位于顶部,内存映射 I/O 设备(例如 VGA 卡的视频 RAM)位于中间。
I/O 地址(
in
/ out
指令的 IO“端口”号)在 8086 中使用相同的地址线,但它完全是一个独立的地址空间:有一个额外的信号线,指示地址是否位于总线是 I/O 或内存地址。
与现代 CPU 不同,现代 CPU 的 IO 访问被路由到 PCIe 或内部设备而不是内存控制器,仅通过与 CPU 内核、内存控制器和系统代理之间互连内部的内存访问相同的总线 = 链接到芯片组和 PCIe 总线。 (除了 PCIe MMIO 访问还通过与 PCIe IO 空间访问相同的 PCIe 外部总线。物理地址空间包括 DRAM,但也包括其他内容,例如 ROM 和设备内存,这些内容不能通过内置的内存控制器访问现代CPU。因此CPU必须根据地址在内部路由内存加载/存储。请参阅https://superuser.com/questions/1226197/x86-address-space-controller/1226198#1226198)