地址環繞和A20地址線問題

早期的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),直到系統軟件去打開它。

 

A20地址線問題 

1981年8月,IBM公司最初推出的個人計算機IBM PC使用的CPU是Intel 8088。在該微機中地址線只有20根(A0-A19)。在當時內存RAM只有幾百KB或不到1MB時,20根地址線已足夠用來尋址這些內存。其所能尋址的最高地址是0xffff:0xffff,也即0x10ffef。對於超出0x100000(1MB)的尋址地址將默認地環繞到0x0ffef。當IBM公司於1985年引入AT機時,使用的是Intel 80286 CPU,具有24根地址線,最高可尋址16MB,並且有一個與8088完全兼容的實模式運行方式。然而,在尋址值超過1MB時它卻不能象8088那樣實現地址尋址的環繞。但是當時已經有一些程序是利用這種地址環繞機制進行工作的。爲了實現完全的兼容性,IBM公司發明了使用一個開關來開啓或禁止0x100000地址比特位。由於在當時的8042鍵盤控制器上恰好有空閒的端口引腳(輸出端口P2,引腳P21),於是便使用了該引腳來作爲與門控制這

個地址比特位。該信號即被稱爲A20。如果它爲零,則比特20及以上地址都被清除。從而實現了兼容性。 由於在機器啓動時,默認條件下,A20地址線是禁止的,所以操作系統必須使用適當的方法來開啓它。但是由於各種兼容機所使用的芯片集不同,要做到這一點卻是非常的麻煩。因此通常要在幾種控制方法中選擇。

 

對A20信號線進行控制的常用方法是通過設置鍵盤控制器的端口值。有些操作系統將A20的開啓和禁止作爲實模式與保護運行模式之間進行轉換的標準過程中的一部分。由於鍵盤的控制器速度很慢,因此就不能使用鍵盤控制器對A20線來進行操作。爲此引進了一個A20快速門選項(Fast Gate A20),它使用I/O端口0x92來處理A20信號線,避免了使用慢速的鍵盤控制器操作方式。對於不含鍵盤控制器的系統就只能使用0x92端口來控制,但是該端口也有可能被其它兼容微機上的設備(如顯示芯片)所使用,從而造成系統錯誤的操作。還有一種方式是通過讀0xee端口來開啓A20信號線,寫該端口則會禁止A20信號線。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章