Linux 为什么在保护模式下启用20线?

Linux 为什么在保护模式下启用20线?,linux,assembly,linux-kernel,x86,operating-system,Linux,Assembly,Linux Kernel,X86,Operating System,在引导加载程序的Linux 0.01程序集源文件中,A20行已启用 从boot/boot.s: | that was painless, now we enable A20 call empty_8042 mov al,#0xD1 ... 之后,引导加载程序跳转到保护模式 在实模式下,启用A20行可以使地址空间扩展为64 KiB-16字节。 在保护模式下,地址总线将自动解锁 当跳转到保护模式时,为什么引导加载程序启用A20地址行 在实模式下,启用A20行可以使地址空间扩展为64

在引导加载程序的Linux 0.01程序集源文件中,A20行已启用

boot/boot.s

| that was painless, now we enable A20

call     empty_8042
mov al,#0xD1

...
之后,引导加载程序跳转到保护模式

在实模式下,启用A20行可以使地址空间扩展为64 KiB-16字节。
在保护模式下,地址总线将自动解锁

当跳转到保护模式时,为什么引导加载程序启用A20地址行

在实模式下,启用A20行可以使地址空间扩展为64 KiB-16字节


正确,在实模式下(在286+上),您可以将段寄存器设置为
0xFFFF
,这将允许您最多访问
(0xFFFF 1)的内存。因此,受保护模式不会启用A20,而是启用与该模式相关联的所有其他地址行(16位->A0-A23,32位->A0-A31),对吗?2.据我所知,“'A20行”[…]“在保护模式按预期运行之前需要禁用”和“在进入保护模式之前需要启用[A20线路]”相互矛盾。请澄清这一点。3.你所说的“这不准确”是什么意思?@cad啊,我现在明白了。是的,你是对的,在真实模式下(在286+上)您可以将段寄存器设置为0xFFFF,这将允许您最多访问内存(0xFFFF@cad实际上不需要启用A20行。如果不启用,则效果是每个奇数兆字节区域都将无法访问。因此1mb-2mb将实际引用0-1mb,3mb-4mb将引用2mb-3mb等。如果不启用A20位,该地址行将始终为零。当然,这是非常无用的,但t仍然是允许的。@cad脚注可能是,DOS的原始版本要求环绕操作系统与CP/M操作系统兼容,允许与用于制作BDOS(基本磁盘操作系统)的CALL 5机制兼容拜访CP/M@MichaelPetch谢谢,我引用了你们对别名的解释,因为它比我的解释更准确(我忘了它会发生在每一个奇数MB)。