关于A20
A20是什么
1981年8月,IBM 公司最初推出的個人計算機所使用的 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 公司發明了一種方法——使用一個開關來開啟或禁止地址線的比特位20到23。
由于當時的 8042 鍵盤控制器上恰好有空閑的端口引腳(輸出端口P2,引腳名是 P21 ),于是便使用了該引腳來作為與門控制這個地址比特位。該信號被稱為 A20。如果它為零,則比特 20 及以上地址都被清除。
在機器啟動時,默認條件下,A20 地址線是禁止的,所以操作系統必須使用適當的方法來開啟它。但是由于各種兼容機所使用的芯片集不同,要做到這一點是非常麻煩的,通常要在幾種控制方案中選擇。
怎樣控制A20
方案一:鍵盤控制器
對 A20 信號線進行控制的常用方法是通過設置鍵盤控制器的端口值。
比如以下代碼可以開啟A20
方案二:端口0x92
有些操作系統將 A20 的開啟和禁止作為實模式與保護模式之間進行轉換的標準過程的一部分。由于鍵盤控制器的速度很慢,因此就不能使用鍵盤控制器對 A20 線來進行操作。為此引進了一個 A20 快速門選項(Fast Gate A20),它使用 I/O 端口 0x92 來處理 A20 信號線。
比如
in al,0x92 ;南橋芯片內的端口 or al,0000_0010Bout 0x92,al ;打開A20方案三:INT 15 中斷
/** 打開A20* 返回結果:* 成功:CF=0, AH=0* 失敗:CF=1, AH=0x01 鍵盤控制器處于secur模式* AH=0x86 功能不支持*/mov ax, 0x2401int 0x15方案四:0xee端口
還有一種方式是通過讀 0xee 端口來開啟 A20 信號線,寫該端口則會禁止 A20 信號線。
in al,0xee ;開啟A20總結
- 上一篇: 消息长度_【消息】听说咱安阳的第一条封闭
- 下一篇: 测试python第二周_python第二