早期的8086只有20根地址线,只能访问1M的地址空间。CPU寻址则按段+偏移的方式进行。16位段+16位偏移的可能的范围是0-0x10FFEF(即0xFFFF0+0xFFFF),即1M+65520字节的范围。由于只有20根地址线,所以在对1M-1M+65520范围进行访问时,会发生“地址回绕”的现象,就是说实际会访问到0-65520的地方。据说某个著名的/臭名昭著的软件利用了这个特点。在80286,386等CPU上,它会失败,因为这些CPU有多于20根的地址线,并不产生“地址回绕”现象。为了保持完全的兼容性,IBM决定在PC AT系统上加个逻辑,来模仿以上的回绕特征。他们的方法就是把A20和键盘控制器的一个输出进行AND,这样来控制A20的打开和关闭。一开始时A20是被屏蔽的(总为0),直到系统软件去打开它。 1981年8月,IBM公司最初推出的个人计算机IBM PC使用的CPU是Intel 8088。在该微机中地址线只有20根(A0-A19)。在当时内存RAM只有几百KB或不到1MB时,20根地址线已足够用来寻址这些内存。其所能寻址的最高地址是0xffff:0xffff,也即0x10ffef。对于超出0x100000(1MB)的寻址地址将默认地环绕到0x0ffef。
对A20信号线进行控制的常用方法是通过设置键盘控制器的端口值。有些操作系统将A20的开启和禁止作为实模式与保护运行模式之间进行转换的标准过程中的一部分。由于键盘的控制器速度很慢,因此就不能使用键盘控制器对A20线来进行操作。为此引进了一个A20快速门选项(Fast Gate A20),它使用I/O端口0x92来处理A20信号线,避免了使用慢速的键盘控制器操作方式。对于不含键盘控制器的系统就只能使用0x92端口来控制,但是该端口也有可能被其它兼容微机上的设备(如显示芯片)所使用,从而造成系统错误的操作。还有一种方式是通过读0xee端口来开启A20信号线,写该端口则会禁止A20信号线。
转载于:https://blog.51cto.com/lion3875/532344