Rag*_*ora 2 x86 intel real-mode memory-address x86-16
在 8086 微处理器中,假设 CS 为 FFFFH,IP 为 FAB0H,那么物理内存地址将通过将 CS 乘以 16 并加上 IP 来计算。ie Add = FFFF0 + FAB0 这个总和会导致溢出,因为总和不能存储在 20 位中。会发生什么?
对于 8086,结果将被截断以适合 20 位;导致它环绕。例如0xFFFF0 + 0xFAB0 = 0x10FAA0 = 0xFAA0
。指向 1 MiB 以上的分段地址然后实际访问前 64 KiB - 16 字节中的内存。
较新的 80x86 CPU(从 80286 开始)支持更宽的物理地址并且不截断;但是为了保持向后兼容性,如果禁用“A20 门”,则通过具有可编程的“A20 门”(最初位于 CPU 外部)来屏蔽第 21 个地址位 (A20) 来模拟旧行为。因此,对于启用了“A20 门”的较新 CPU,您可以在实模式下访问几乎 64 KiB 的物理地址空间(最多0xFFFF:0xFFFF = 0x10FFEF
65520 字节,比原始 1 MiB 多)。这称为高内存区。