8086中CS:IP对应的物理地址超过20位会怎样?
What happens when the physical address corresponding to CS:IP is more than 20 bits in 8086?
在8086微处理器中,假设CS为FFFFH,IP为FAB0H
然后物理内存地址将通过将 CS 乘以 16 并添加 IP 来计算。
IE。
添加 = FFFF0 + FAB0
该和会产生溢出,因为该和不能以 20 位的形式存储。
会发生什么?
对于 8086,结果将被截断以适合 20 位;导致它环绕。例如 0xFFFF0 + 0xFAB0 = 0x10FAA0 = 0xFAA0
。指向 1 MiB 以上的分段地址实际上访问前 64 KiB - 16 字节中的内存。
较新的 80x86 CPUs(从 80286 开始)支持更宽的物理地址并且不截断;但是为了保持向后兼容性,旧的行为是通过可编程的 "A20 gate"(最初在 CPU 之外)来模拟的,如果 "A20 gate" 被禁用则屏蔽第 21 个地址位 (A20)。因此,对于启用了 "A20 gate" 的较新的 CPUs,您可以在实模式下访问近 64 KiB 更多的物理地址 space(最多 0xFFFF:0xFFFF = 0x10FFEF
,或更多 65520 字节比原来的 1 MiB)。这称为高端内存区。
在8086微处理器中,假设CS为FFFFH,IP为FAB0H 然后物理内存地址将通过将 CS 乘以 16 并添加 IP 来计算。 IE。 添加 = FFFF0 + FAB0 该和会产生溢出,因为该和不能以 20 位的形式存储。 会发生什么?
对于 8086,结果将被截断以适合 20 位;导致它环绕。例如 0xFFFF0 + 0xFAB0 = 0x10FAA0 = 0xFAA0
。指向 1 MiB 以上的分段地址实际上访问前 64 KiB - 16 字节中的内存。
较新的 80x86 CPUs(从 80286 开始)支持更宽的物理地址并且不截断;但是为了保持向后兼容性,旧的行为是通过可编程的 "A20 gate"(最初在 CPU 之外)来模拟的,如果 "A20 gate" 被禁用则屏蔽第 21 个地址位 (A20)。因此,对于启用了 "A20 gate" 的较新的 CPUs,您可以在实模式下访问近 64 KiB 更多的物理地址 space(最多 0xFFFF:0xFFFF = 0x10FFEF
,或更多 65520 字节比原来的 1 MiB)。这称为高端内存区。