实模式切换到保护模式,为什么要开启A20地址线(系统升级产生的兼容性问题)
生活随笔
收集整理的這篇文章主要介紹了
实模式切换到保护模式,为什么要开启A20地址线(系统升级产生的兼容性问题)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
【-1】寫在前面:
以下部分內(nèi)容總結(jié)于 http://blog.csdn.net/ruyanhai/article/details/7181842
complementary: 兼容性是指運(yùn)行在前期CPU,如8086/8088上的的程序,也可以運(yùn)行在其以后的處理器,如80286上;
【0】看看intel處理器的發(fā)展歷程
【1】8086/8088的尋址和問題
1.1)尋址:在8086/8088中,只有20根地址總線,所以可以訪問的地址是2^20=1M,但由于8086/8088是16位地址模式,能夠表示的地址范圍是0-64K,所以為了在8086/8088下能夠訪問1M內(nèi)存,Intel采取了分段的模式:16位段基地址:16位偏移。其絕對地址計(jì)算方法為:16位基地址左移4位+16位偏移=20位地址;(這個(gè)比較簡單)
1.2)問題: 但這種方式引起了新的問題,通過上述分段模式,能夠表示的最大內(nèi)存為:FFFFh:FFFFh=FFFF0h+FFFFh=10FFEFh=1M+64K-16Bytes(1M多余出來的部分被稱做高端內(nèi)存區(qū)HMA)。但8086/8088只有20位地址線,如果訪問100000h~10FFEFh之間的內(nèi)存,則必須有第21根地址線。所以當(dāng)程序員給出超過1M(100000H-10FFEFH)的地址時(shí),系統(tǒng)并不認(rèn)為其訪問越界而產(chǎn)生異常,而是自動(dòng)從重新0開始計(jì)算,也就是說系統(tǒng)計(jì)算實(shí)際地址的時(shí)候是按照對1M求模的方式進(jìn)行的,這種技術(shù)被稱為wrap-around。
【2】80286的尋址和問題
2.0)尋址: 到了80286,系統(tǒng)的地址總線發(fā)展為24根,這樣能夠訪問的內(nèi)存可以達(dá)到2^24=16M。Intel在設(shè)計(jì)80286時(shí)提出的目標(biāo)是,在實(shí)模式下,系統(tǒng)所表現(xiàn)的行為應(yīng)該和8086/8088所表現(xiàn)的完全一樣,也就是說,在實(shí)模式下,80286以及后續(xù)系列,應(yīng)該和8086/8088完全兼容;
2.1)問題:如果程序員訪問100000H-10FFEFH之間的內(nèi)存,80286將實(shí)際訪問這塊內(nèi)存,而不是像過去一樣重新從0開始,因?yàn)?0286有這個(gè)尋址能力,但是這就不能滿足和8086/8088的系統(tǒng)兼容性,因?yàn)?086/8088不能訪問到100000H-10FFEFH之間的內(nèi)存的真實(shí)地址而是按照對1M求模的內(nèi)存尋址方式;
【3】再淺談80286 和 8086/8088 間的兼容性問題:(實(shí)模式下,80286的系統(tǒng)表現(xiàn)要同8086/8088的一致)
3.1)當(dāng)A20被禁止時(shí):程序員給出100000H~10FFEFH間的地址,80286和8086/8088 的系統(tǒng)表現(xiàn)是一致的,即按照對1M求模的方式進(jìn)行尋址,滿足系統(tǒng)升級的兼容性問題;
3.2)當(dāng)A20被開啟時(shí):程序員給出的100000H~10FFEFH間的地址,80286是訪問的真實(shí)地址,而8086/8088是始終是按照對1M求模的方式進(jìn)行的(這里注意,是始終);
【4】解決方法:
為了解決上述問題,IBM使用鍵盤控制器上剩余的一些輸出線來管理第21根地址線(從0開始數(shù)是第20根),被稱為A20Gate:如果A20 Gate被打開,則當(dāng)程序員給出100000H-10FFEFH之間的地址的時(shí)候,系統(tǒng)將真正訪問這塊內(nèi)存區(qū)域;如果A20Gate被禁止,則當(dāng)程序員給出100000H-10FFEFH之間的地址的時(shí)候,系統(tǒng)仍然使用8086/8088的方式。
【5】有請實(shí)模式+保護(hù)模式閃亮登場(干貨)
5.1)實(shí)模式:實(shí)模式就是, 為了實(shí)現(xiàn)系統(tǒng)升級的兼容性,如80286的系統(tǒng)表現(xiàn)(包括80286以后的CPU)要與8086/8088 的系統(tǒng)表現(xiàn)一致,就需要80286 CPU訪問100000H-10FFEFH之間的地址的時(shí)候, 按照對1M求模的方式進(jìn)行, 無論A20地址線開啟關(guān)閉與否, 這種內(nèi)存訪問情況 稱為實(shí)模式;
5.2)保護(hù)模式:保護(hù)模式就是, 以A20地址線開啟為前提,80286 CPU訪問100000H-10FFEFH之間的地址的時(shí)候, 是訪問真實(shí)的內(nèi)存地址,不是求模訪問,如訪問100001H,就是真真切切地 訪問 0x 100001H,而不是求模的 0x000001H 地址, 這種內(nèi)存訪問情況稱為保護(hù)模式;
5.3)誕生日: 實(shí)模式是從8088/8086 就開始存在了, 而保護(hù)模式從 80286 才開始存在;
【6】為什么需要保護(hù)模式?(因?yàn)閷?shí)模式與生俱來,是伴隨著8088/8086 從天而降的,它僅僅是訪問內(nèi)存的一種方式而已; 還有對于8086/8088而言,它只有實(shí)模式這一種內(nèi)存尋址方式,而對于80286包括其以后的CPU,有實(shí)模式和保護(hù)模式兩種尋址方式,因?yàn)橐骖櫹到y(tǒng)兼容性)
顯然隨著CPU的升級,8088/8086的內(nèi)存尋址方式已經(jīng)無法滿足需要,也可以說,為了能夠訪問10FFEFH以上的內(nèi)存,則必須進(jìn)入保護(hù)模式;
【7】A20被禁止+被開啟的不同結(jié)果
7.1)如果A20Gate被禁止:對于80286來說,其地址為24bit,其地址表示為EFFFFF;對于80386極其隨后的32-bit芯片來說,其地址表示為FFEFFFFF。這種表示的意思是如果A20Gate被禁止,則其第20-bit在CPU做地址訪問的時(shí)候是無效的,永遠(yuǎn)只能被作為0;
7.2)如果A20 Gate被打開:則其第20-bit是有效的,其值既可以是0,又可以是1;
7.3)所以:在保護(hù)模式下,如果A20 Gate被打開,則可以訪問的內(nèi)存則是連續(xù)的;如果A20Gate被禁止,則可以訪問的內(nèi)存只能是偶數(shù)段,
因?yàn)槭?0位(從0始)總為零,所23~20位只能是0000、0010、0100、0110、1000、1010、1100、1110對應(yīng)十六進(jìn)制為0、2、4、6、8、A、C、E。對應(yīng)的十六進(jìn)制地址段是000000-0FFFFF,200000-2FFFFF,400000-4FFFFF…
總結(jié)
以上是生活随笔為你收集整理的实模式切换到保护模式,为什么要开启A20地址线(系统升级产生的兼容性问题)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是上市辅导备案登记(辅导备案登记受理
- 下一篇: (实模式+保护模式)模式切换的过程步骤(