版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】intelA20地址線
A20地址線并不是打開保護(hù)模式的關(guān)鍵,只是在保護(hù)模式下,不打開A20地址線,你將無法訪問到所有的內(nèi)存(具體參考下面的第5點)
調(diào)用BIOS中斷就可以實現(xiàn)A20Gate的控制功能。
這個BIOS中斷為INT15h,AX=2401h。被稱為FastA20。下面轉(zhuǎn)載一篇文檔:/view/b673e3360b4c2e3f57276369.html
很多稀奇古怪的東西都是由于系統(tǒng)升級時,為了保持向下兼容而產(chǎn)生的,A20Gate就是其中之一。
在8086/8088中,只有20根地址總線,所以可以訪問的地址是2^20=1M,但由于8086/8088是16位地址模式,能夠表示的地址范圍是0-64K,所以為了在8086/8088下能夠訪問1M內(nèi)存,Intel采取了分段的模式:16位段基地址:16位偏移。其絕對地址計算方法為:16位基地址左移4位+16位偏移=20位地址。
但這種方式引起了新的問題,通過上述分段模式,能夠表示的最大內(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)的地址時,系統(tǒng)并不認(rèn)為其訪問越界而產(chǎn)生異常,而是自動從重新0開始計算,也就是說系統(tǒng)計算實際地址的時候是按照對1M求模的方式進(jìn)行的,這種技術(shù)被稱為wrap-around。
到了80286,系統(tǒng)的地址總線發(fā)展為24根,這樣能夠訪問的內(nèi)存可以達(dá)到2^24=16M。Intel在設(shè)計80286時提出的目標(biāo)是,在實模式下,系統(tǒng)所表現(xiàn)的行為應(yīng)該和8086/8088所表現(xiàn)的完全一樣,也就是說,在實模式下,80286以及后續(xù)系列,應(yīng)該和8086/8088完全兼容。但最終,80286芯片卻存在一個BUG:如果程序員訪問100000H-10FFEFH之間的內(nèi)存,系統(tǒng)將實際訪問這塊內(nèi)存,而不是象過去一樣重新從0開始。
為了解決上述問題,IBM使用鍵盤控制器上剩余的一些輸出線來管理第21根地址線(從0開始數(shù)是第20根),被稱為A20Gate:如果A20Gate被打開,則當(dāng)程序員給出100000H-10FFEFH之間的地址的時候,系統(tǒng)將真正訪問這塊內(nèi)存區(qū)域;如果A20Gate被禁止,則當(dāng)程序員給出100000H-10FFEFH之間的地址的時候,系統(tǒng)仍然使用8086/8088的方式。絕大多數(shù)IBMPC兼容機(jī)默認(rèn)的A20Gate是被禁止的。由于在當(dāng)時沒有更好的方法來解決這個問題,所以IBM使用了鍵盤控制器來操作A20Gate,但這只是一種***行為,畢竟A20Gate和鍵盤操作沒有任何關(guān)系。在許多新型PC上存在著一種通過芯片來直接控制A20Gate的BIOS功能。從性能上,這種方法比通過鍵盤控制器來控制A20Gate要稍微高一點。
上面所述的內(nèi)存訪問模式都是實模式,在80286以及更高系列的PC中,即使A20Gate被打開,在實模式下所能夠訪問的內(nèi)存最大也只能為10FFEFH,盡管它們的地址總線所能夠訪問的能力都大大超過這個限制。為了能夠訪問10FFEFH以上的內(nèi)存,則必須進(jìn)入保護(hù)模式。(其實所謂的實模式,就是8086/8088的模式,這種模式存在的唯一理由就是為了讓舊的程序能夠繼續(xù)正常的運行在新的PC體系上)
1.A20GateinProtectedMode
從80286開始,系統(tǒng)出現(xiàn)了一種新的機(jī)制,被稱為保護(hù)模式。到了80386,保護(hù)模式得到了進(jìn)一步的完善和發(fā)展,并且對于80386以后的芯片,保護(hù)模式的變化就非常小了。
我們在上一節(jié)已經(jīng)談到,如果要訪問更多的內(nèi)存,則必須進(jìn)入保護(hù)模式,那么,在保護(hù)模式下,A20Gate對于內(nèi)存訪問有什么影響呢?
為了搞清楚這一點,我們先來看一看A20的工作原理。A20,從它的名字就可以看出來,其實它就是對于20-bit(從0開始數(shù))的特殊處理(也就是對第21根地址線的處理)。如果A20Gate被禁止,對于80286來說,其地址為24bit,其地址表示為EFFFFF;對于80386極其隨后的32-bit芯片來說,其地址表示為FFEFFFFF。這種表示的意思是如果A20Gate被禁止,則其第20-bit在CPU做地址訪問的時候是無效的,永遠(yuǎn)只能被作為0;如果A20Gate被打開,則其第20-bit是有效的,其值既可以是0,又可以是1。
所以,在保護(hù)模式下,如果A20Gate被禁止,則可以訪問的內(nèi)存只能是奇數(shù)1M段,即1M,3M,5M…,也就是00000-FFFFF,200000-2FFFFF,300000-3FFFFF…。如果A20Gate被打開,則可以訪問的內(nèi)存則是連續(xù)的。
2.HowtoEnableA20Gate
多數(shù)PC都使用鍵盤控制器(8042芯片)來處理A20Gate。
從理論上講,打開A20Gate的方法是通過設(shè)置8042芯片輸出端口(64h)的2nd-bit,但事實上,當(dāng)你向8042芯片輸出端口進(jìn)行寫操作的時候,在鍵盤緩沖區(qū)中,或許還有別的數(shù)據(jù)尚未處理,因此你必須首先處理這些數(shù)據(jù)。
流程如下:
1.禁止中斷;
2.等待,直到8042Inputbuffer為空為止;
3.發(fā)送禁止鍵盤操作命令到8042Inputbuffer;
4.等待,直到8042Inputbuffer為空為止;
5.發(fā)送讀取8042OutputPort命令;
6.等待,直到8042Outputbuffer有數(shù)據(jù)為止;
7.讀取8042Outputbuffer,并保存得到的字節(jié);
8.等待,直到8042Inputbuffer為空為止;
9.發(fā)送Write8042OutputPort命令到8042Inputbuffer;
10.等待,直到8042Inputbuffer為空為止;
11.將從8042OutputPort得到的字節(jié)的第2位置1(OR2),然后寫入8042Inputbuffer;
12.等待,直到8042Inputbuffer為空為止;
13.發(fā)送允許鍵盤操作命令到8042Inputbuffer;
14.打開中斷。
下面代碼是一個相關(guān)實現(xiàn):
enable_a20:
sti
callwait_input_empty
movb$0xAD,%al
outb$0x64#disableKeyboard
callwait_input_empty
movb$0xD0,%al
outb$0x64#command-read8042outputport
callwait_output_full
inb$0x60#gotthevalueof8042outputportandsaveit
pushb%al
callwait_input_empty
movb$0xD1,%al
outb$0x64#command-write8042outputport
callwait_input_empty
popb%al
orb$0x02,%al#enableA20Gate
outb$0x60
callwait_input_empty
movb$0xAE,%al
outb$0x64#enableKeyboard
cli
ret
wait_input_empty:
rp1:inb$0x64
testb%al,0x02
jnzrp1
ret
wait_output_full:
rp2:inb$0x64
testb%al,0x01
jzrp2
ret
以上描述的是一種和IBMPC完全兼容的,通過鍵盤控制器控制A20Gate的方法。但是,正象我們在前面所提到的,A20Gate與鍵盤操作完全沒有關(guān)系,IBM之所以將A20Gate的功能控制放在鍵盤控制器上,完全是一種為了彌補Intel80286與Intel8086/8088不完全兼容的缺陷,而采取的Hacker行為,所以在許多新型PC上存在著一種通過芯片來直接控制A20Gate的BIOS功能,我們在RealMode下只需要調(diào)用BIOS中斷就可以實現(xiàn)A20Gate的控制功能。
這個BIOS中斷為INT15h,AX=2401h。被稱為FastA20。
movw$0x2401,%ax
int$0x15
3.HowtoDetectifA20GatehasbeenEnabled?
我們在之前已經(jīng)提到,如果A20Gate被打開了,則在實模式下,程序員可以直接訪問100000H~10FFEFH之間的內(nèi)存,如果A20Gate被禁止,則在實模式下,若程序員訪問100000H~10FFEFH之間的內(nèi)存,則會被硬件自動轉(zhuǎn)換為0H~0FFEFH之間的內(nèi)存,所以我們可以利用這個差異來檢測A20Gate是否被打開。
#ThisroutinetestswhetherornotA20isenabled.Ifso,it
#exitswithzf=0.
#
#Thememoryaddressused,0x200,istheint$0x80vector,which
#shouldbesafe.
A20_TEST_ADDR=4*0x80
A20_TEST_LOOPS=3
a20_test:pushw%cxpushw%axxorw%cx,%cxmovw%cx,%fs#Lowmemorydecw%cxmovw%cx,%gs#Highmemoryareamovw$A20_TEST_LOOPS,%cxmovw%fs:(A20_TEST_ADDR),%axpushw%ax
a20_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- LS/T 6150-2024糧油檢驗小麥粉面團(tuán)流變學(xué)特性測試揉混儀法
- 2025-2030年中國鋼材貿(mào)易行業(yè)資本規(guī)劃與股權(quán)融資戰(zhàn)略制定與實施研究報告
- 2025-2030年中國公眾物業(yè)管理行業(yè)商業(yè)模式創(chuàng)新戰(zhàn)略制定與實施研究報告
- 2025-2030年中國紅外探測器行業(yè)營銷創(chuàng)新戰(zhàn)略制定與實施研究報告
- 2025-2030年中國智慧屏行業(yè)全國市場開拓戰(zhàn)略制定與實施研究報告
- 2024中國建筑工程用機(jī)械制造行業(yè)分析報告
- 年產(chǎn)6萬噸銅項目可行性研究報告(模板)
- 年產(chǎn)汽車橫拉桿總成項目申請報告
- 廣東省湛江市廉江市2022-2023學(xué)年五年級上學(xué)期英語期末試卷
- 導(dǎo)播理論知識培訓(xùn)班課件
- 2024年道路清障拖車服務(wù)合同協(xié)議3篇
- 2025年1月八省聯(lián)考河南新高考物理試卷真題(含答案詳解)
- 建設(shè)工程檢試驗工作管理實施指引
- 軟件租賃合同范例
- 匯川技術(shù)在線測評題及答案
- 雙方個人協(xié)議書模板
- 廣東省廣州市2023-2024學(xué)年高一上學(xué)期期末物理試卷(含答案)
- 2024年四川省公務(wù)員錄用考試《行測》真題及答案解析
- 銀行內(nèi)部管理檔案制度
- 安徽省蕪湖市2023-2024學(xué)年高一上學(xué)期期末考試 物理 含解析
- 電氣自動化年終總結(jié)
評論
0/150
提交評論