首页 > 解决方案 > CS:IP对应的物理地址在8086中超过20位会怎样?

问题描述

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

标签: x86intelx86-16memory-addressreal-mode

解决方案


对于 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 字节)。这称为高内存区。


推荐阅读