X86 在8086中,当CS:IP对应的物理地址超过20位时会发生什么情况?

X86 在8086中,当CS:IP对应的物理地址超过20位时会发生什么情况?,x86,intel,x86-16,memory-address,real-mode,X86,Intel,X86 16,Memory Address,Real Mode,在8086微处理器中,假设CS是FFFFH,IP是FAB0H 然后,将CS乘以16并添加IP来计算物理内存地址。 即 Add=FFFF0+FAB0 由于总和不能存储在20位中,因此该总和会产生溢出。 会发生什么 对于8086,结果将被截断以适合20位;使其环绕。例如0xFFFF0+0xFAB0=0x10FAA0=0xFAA0。指向1 MiB以上的分段地址实际上会访问前64 KiB-16字节中的内存 较新的80x86 CPU(从80286开始)支持更宽的物理地址,并且不截断;但是为了保持向后兼容性

在8086微处理器中,假设CS是FFFFH,IP是FAB0H 然后,将CS乘以16并添加IP来计算物理内存地址。 即 Add=FFFF0+FAB0 由于总和不能存储在20位中,因此该总和会产生溢出。
会发生什么

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

加法器只有16位,执行被丢弃。因此,它最终“包装”了mod 2^20Chris是正确的。作为附录,与您的问题无关-在80286(或更高版本的处理器)上有20多条地址行(80286上有24条,80386+上有32条或更多)。在禁用A20线路的80286+上(地址位20始终设置为0),它的封装方式类似于8086处理器。如果启用A20,则无需包装,您可以寻址1MiB标记上方的64KiB-16字节。所以FFFF:FFFF(最高段:偏移地址)将引用物理地址(FFFF