【问题标题】:What happens when the physical address corresponding to CS:IP is more than 20 bits in 8086?CS:IP对应的物理地址在8086中超过20位会怎样?
【发布时间】:2020-02-24 03:32:03
【问题描述】:

在8086微处理器中,假设CS为FFFFH,IP为FAB0H 然后通过将 CS 乘以 16 并加上 IP 来计算物理内存地址。 IE。 添加 = FFFF0 + FAB0 这个总和会产生溢出,因为总和不能存储在 20 位中。 会发生什么?

【问题讨论】:

  • 加法器只有16位,进位被丢弃。所以它最终“包装”了 mod 2^20
  • 克里斯是正确的。作为附录,与您的问题无关 - 在 80286(或更高版本的处理器)上有超过 20 条地址线(80286 上有 24 条,80386+ 上有 32 条或更多) .在禁用 A20 线(地址位 20 始终设置为 0)的 80286+ 上,它像 8086 处理器一样包装。启用 A20 后就没有回绕,您可以寻址 1MiB 标记上方的 64KiB-16 字节。因此 FFFF:FFFF (最高段:偏移地址)将在启用 A20 的情况下在 80286+ 上引用物理地址 (FFFF

标签: x86 intel x86-16 memory-address real-mode


【解决方案1】:

对于 8086,结果将被截断以适合 20 位;导致它环绕。例如0xFFFF0 + 0xFAB0 = 0x10FAA0 = 0xFAA0。然后,指向 1 MiB 以上的分段地址实际上会在前 64 KiB - 16 字节中访问内存。

较新的 80x86 CPU(从 80286 开始)支持更宽的物理地址并且不会截断;但是为了保持向后兼容性,旧行为是通过使用可编程的“A20 门”(最初位于 CPU 外部)来模拟的,以在禁用“A20 门”时屏蔽第 21 个地址位 (A20)。因此,对于启用了“A20 门”的较新 CPU,您可以在实模式下多访问近 64 KiB 的物理地址空间(最多 0xFFFF:0xFFFF = 0x10FFEF,或比原来的 1 MiB 多 65520 字节)。这称为高内存区。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 2019-08-15
    相关资源
    最近更新 更多