X86 如果段地址大于F000H,是否启用A20引脚?

X86 如果段地址大于F000H,是否启用A20引脚?,x86,intel,offset,segment,real-mode,X86,Intel,Offset,Segment,Real Mode,在Barry B.Brey的《英特尔微处理器》一书中,我看到,如果段地址为FFFFH,则在向段地址添加偏移量时启用20引脚。但为了充分利用“高内存”,F001H到FFFFH(存储在段寄存器中的值)范围内的任何段地址都应该这样做 因此,如果段寄存器中的值为F001H,偏移量为FFFFH,则如果A20引脚启用,实际地址应为10000FH。但如果禁用,实际地址将为0000FH A20引脚是否为F001H到FFFFH范围内的任何段地址启用?或者管脚仅为段寄存器中的FFFFH启用?对于特定的段寄存器值范围

在Barry B.Brey的《英特尔微处理器》一书中,我看到,如果段地址为FFFFH,则在向段地址添加偏移量时启用20引脚。但为了充分利用“高内存”,F001H到FFFFH(存储在段寄存器中的值)范围内的任何段地址都应该这样做

因此,如果段寄存器中的值为F001H,偏移量为FFFFH,则如果A20引脚启用,实际地址应为10000FH。但如果禁用,实际地址将为0000FH


A20引脚是否为F001H到FFFFH范围内的任何段地址启用?或者管脚仅为段寄存器中的FFFFH启用?

对于特定的段寄存器值范围,A20管脚未被断言(启用)。它可以打开也可以关闭(一些现代CPU不再允许您关闭A20引脚)。但也有例外。当386处理器通电时,A20-A31线路处于高位(断言),直到第一个段间跳转或调用完成(有效地直到CS段被更改),此时它们都处于低位(零)。这允许BIOS入口点刚好位于4gb标记之下,而不是第一个兆字节之下。使用上述A20-A31技巧(现代处理器可能会做相同的事情,但机制不同),处理器以F000的CS段和FFF0的偏移量开始。正常情况下,这是物理地址0xFFFF0,但由于通电时,上面12条地址线处于高位,因此实际物理内存位置访问为0xFFFFF0。直到CS段通过积分(远)跳转或呼叫改变,此时A20-A31返回到零状态,这种情况才会改变。因此,请回答您的问题。除通电后,在段间(远)跳转或改变CS的呼叫之前,A20引脚处于打开或关闭状态。它不随段寄存器中的值而变化。在旁注上。一种流行的机制(几乎总是这样)是,许多386处理器将CS描述符缓存基值设置为0xFFFF0000,从而使A20-A31引脚在通电时看起来很高。在实模式下,可见CS段寄存器中的实际值没有被使用,这让很多人感到惊讶。设置CS时,将计算一个隐藏的基,并将其放置在描述符缓存中,用于进一步的计算。启动时,CS中的0xF000不相关。开机初始化时,偏移量0xFFF0被添加到隐藏的基值0xFFFF0000中,该基值最终为0xFFFFF0。@MichaelPetch我想你应该把它变成一个答案