intelA20地址線-創(chuàng)新互聯(lián)

A20地址線并不是打開保護(hù)模式的關(guān)鍵,只是在保護(hù)模式下,不打開A20地址線,你將無法訪問到所有的內(nèi)存(具體參考下面的第5點(diǎn))

公司專注于為企業(yè)提供成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、微信公眾號(hào)開發(fā)、成都做商城網(wǎng)站,成都小程序開發(fā),軟件定制網(wǎng)站開發(fā)等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。憑借多年豐富的經(jīng)驗(yàn),我們會(huì)仔細(xì)了解各客戶的需求而做出多方面的分析、設(shè)計(jì)、整合,為客戶設(shè)計(jì)出具風(fēng)格及創(chuàng)意性的商業(yè)解決方案,創(chuàng)新互聯(lián)公司更提供一系列網(wǎng)站制作和網(wǎng)站推廣的服務(wù)。
  1. 用于80286與8086兼容
  1. 用于80286處于實(shí)模式下時(shí),防止用戶程序訪問到100000h~10FFEFh之間的內(nèi)存(高端內(nèi)存)
  2. 8086模式,A20關(guān)閉的情況下,訪問超過1MB內(nèi)存時(shí),會(huì)自動(dòng)回卷
  1. 8086模式下,A20打開的情況下,訪問超過1MB內(nèi)存,就真實(shí)的訪問
  1. 保護(hù)模式下,A20關(guān)閉(始終為0),則用戶的地址只能是:0 - (1MB-1), 2 - (3MB-1), 4 - (5MB-1),我們可以這樣設(shè)想,A20為個(gè)位數(shù)(以1MB為單位),如果它始終為0,你永遠(yuǎn)不可能讓這個(gè)數(shù)變成奇數(shù)。
  1. 保護(hù)模式下,A20開啟,則可以訪問全地址,沒有奇偶MB的問題。

調(diào)用BIOS中斷就可以實(shí)現(xiàn)A20 Gate的控制功能。

這個(gè)BIOS中斷為 INT 15h,AX=2401h。被稱為Fast A20。

下面轉(zhuǎn)載一篇文檔:

http://wenku.baidu.com/view/b673e3360b4c2e3f57276369.html 

很多稀奇古怪的東西都是由于系統(tǒng)升級(jí)時(shí),為了保持向下兼容而產(chǎn)生的,A20Gate就是其中之一。

在8086/8088中,只有20根地址總線,所以可以訪問的地址是2^20=1M,但由于8086/8088是16位地址模式,能夠表示的地址范圍是0-64K,所以為了在8086/8088下能夠訪問1M內(nèi)存,Intel采取了分段的模式:16位段基地址:16位偏移。其絕對(duì)地址計(jì)算方法為: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)的地址時(shí),系統(tǒng)并不認(rèn)為其訪問越界而產(chǎn)生異常,而是自動(dòng)從重新0開始計(jì)算,也就是說系統(tǒng)計(jì)算實(shí)際地址的時(shí)候是按照對(duì)1M求模的方式進(jìn)行的,這種技術(shù)被稱為wrap-around。

到了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完全兼容。但最終,80286芯片卻存在一個(gè)BUG:如果程序員訪問100000H-10FFEFH之間的內(nèi)存,系統(tǒng)將實(shí)際訪問這塊內(nèi)存,而不是象過去一樣重新從0開始。

為了解決上述問題,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的方式。絕大多數(shù)IBM PC兼容機(jī)默認(rèn)的A20Gate是被禁止的。由于在當(dāng)時(shí)沒有更好的方法來解決這個(gè)問題,所以IBM使用了鍵盤控制器來操作A20 Gate,但這只是一種***行為,畢竟A20Gate和鍵盤操作沒有任何關(guān)系。在許多新型PC上存在著一種通過芯片來直接控制A20 Gate的BIOS功能。從性能上,這種方法比通過鍵盤控制器來控制A20Gate要稍微高一點(diǎn)。

上面所述的內(nèi)存訪問模式都是實(shí)模式,在80286以及更高系列的PC中,即使A20Gate被打開,在實(shí)模式下所能夠訪問的內(nèi)存大也只能為10FFEFH,盡管它們的地址總線所能夠訪問的能力都大大超過這個(gè)限制。為了能夠訪問10FFEFH以上的內(nèi)存,則必須進(jìn)入保護(hù)模式。(其實(shí)所謂的實(shí)模式,就是8086/8088的模式,這種模式存在的唯一理由就是為了讓舊的程序能夠繼續(xù)正常的運(yùn)行在新的PC體系上)

1. A20 Gate inProtected Mode

從80286開始,系統(tǒng)出現(xiàn)了一種新的機(jī)制,被稱為保護(hù)模式。到了80386,保護(hù)模式得到了進(jìn)一步的完善和發(fā)展,并且對(duì)于80386以后的芯片,保護(hù)模式的變化就非常小了。

我們?cè)谏弦还?jié)已經(jīng)談到,如果要訪問更多的內(nèi)存,則必須進(jìn)入保護(hù)模式,那么,在保護(hù)模式下,A20Gate對(duì)于內(nèi)存訪問有什么影響呢?

為了搞清楚這一點(diǎn),我們先來看一看A20的工作原理。A20,從它的名字就可以看出來,其實(shí)它就是對(duì)于20-bit(從0開始數(shù))的特殊處理(也就是對(duì)第21根地址線的處理)。如果A20Gate被禁止,對(duì)于80286來說,其地址為24bit,其地址表示為EFFFFF;對(duì)于80386極其隨后的32-bit芯片來說,其地址表示為FFEFFFFF。這種表示的意思是如果A20Gate被禁止,則其第20-bit在CPU做地址訪問的時(shí)候是無效的,永遠(yuǎn)只能被作為0;如果A20 Gate被打開,則其第20-bit是有效的,其值既可以是0,又可以是1。

所以,在保護(hù)模式下,如果A20Gate被禁止,則可以訪問的內(nèi)存只能是奇數(shù)1M段,即1M,3M,5M…,也就是00000-FFFFF,200000-2FFFFF,300000-3FFFFF…。如果A20 Gate被打開,則可以訪問的內(nèi)存則是連續(xù)的。

2. How to Enable A20Gate

多數(shù)PC都使用鍵盤控制器(8042芯片)來處理A20Gate。

從理論上講,打開A20Gate的方法是通過設(shè)置8042芯片輸出端口(64h)的2nd-bit,但事實(shí)上,當(dāng)你向8042芯片輸出端口進(jìn)行寫操作的時(shí)候,在鍵盤緩沖區(qū)中,或許還有別的數(shù)據(jù)尚未處理,因此你必須首先處理這些數(shù)據(jù)。

流程如下:

1. 禁止中斷;

2. 等待,直到8042 Inputbuffer為空為止;

3. 發(fā)送禁止鍵盤操作命令到8042Input buffer;

4. 等待,直到8042 Inputbuffer為空為止;

5. 發(fā)送讀取8042 OutputPort命令;

6. 等待,直到8042 Outputbuffer有數(shù)據(jù)為止;

7. 讀取8042 Outputbuffer,并保存得到的字節(jié);

8. 等待,直到8042 Inputbuffer為空為止;

9. 發(fā)送Write 8042Output Port命令到8042 Input buffer;

10. 等待,直到8042 Inputbuffer為空為止;

11. 將從8042 OutputPort得到的字節(jié)的第2位置1(OR 2),然后寫入8042 Input buffer;

12. 等待,直到8042 Inputbuffer為空為止;

13. 發(fā)送允許鍵盤操作命令到8042Input buffer;

14. 打開中斷。

下面代碼是一個(gè)相關(guān)實(shí)現(xiàn):

enable_a20:

sti

callwait_input_empty

movb $0xAD, %al

outb $0x64 #disableKeyboard

callwait_input_empty

movb $0xD0, %al

outb $0x64 #command-read 8042 output port

callwait_output_full

inb $0x60 # got thevalue of 8042 output port and save it

pushb %al

callwait_input_empty

movb $0xD1, %al

outb $0x64 #command-write 8042 output port

callwait_input_empty

popb %al

orb $0x02, %al #enable A20 Gate

outb $0x60

callwait_input_empty

movb $0xAE, %al

outb $0x64 #enableKeyboard

cli

ret

wait_input_empty:

rp1: inb $0x64

testb %al, 0x02

jnz rp1

ret

wait_output_full:

rp2: inb $0x64

testb %al, 0x01

jz rp2

ret

以上描述的是一種和IBMPC完全兼容的,通過鍵盤控制器控制A20 Gate的方法。但是,正象我們?cè)谇懊嫠岬降?,A20 Gate與鍵盤操作完全沒有關(guān)系,IBM之所以將A20Gate的功能控制放在鍵盤控制器上,完全是一種為了彌補(bǔ)Intel 80286與Intel8086/8088不完全兼容的缺陷,而采取的Hacker行為,所以在許多新型PC上存在著一種通過芯片來直接控制A20 Gate的BIOS功能,我們?cè)赗ealMode下只需要調(diào)用BIOS中斷就可以實(shí)現(xiàn)A20 Gate的控制功能。

這個(gè)BIOS中斷為 INT 15h, AX=2401h。被稱為Fast A20。

movw $0x2401, %ax

int $0x15

3. How to Detect ifA20 Gate has been Enabled?

我們?cè)谥耙呀?jīng)提到,如果A20Gate被打開了,則在實(shí)模式下,程序員可以直接訪問100000H~10FFEFH之間的內(nèi)存,如果A20Gate被禁止,則在實(shí)模式下,若程序員訪問100000H~10FFEFH之間的內(nèi)存,則會(huì)被硬件自動(dòng)轉(zhuǎn)換為0H~0FFEFH之間的內(nèi)存,所以我們可以利用這個(gè)差異來檢測(cè)A20Gate是否被打開。

# This routine testswhether or not A20 is enabled. If so, it

# exits with zf = 0.

#

# The memory addressused, 0x200, is the int $0x80 vector, which

# should be safe.

A20_TEST_ADDR =4*0x80

A20_TEST_LOOPS = 3

a20_test:

pushw %cx

pushw %ax

xorw %cx, %cx

movw %cx, %fs # Lowmemory

decw %cx

movw %cx, %gs # Highmemory area

movw$A20_TEST_LOOPS, %cx

movw%fs:(A20_TEST_ADDR), %ax

pushw %ax

a20_test_wait:

incw %ax

movw %ax,%fs:(A20_TEST_ADDR)

call delay #Serialize and make delay constant

cmpw%gs:(A20_TEST_ADDR+0x10), %ax

loope a20_test_wait

popw%fs:(A20_TEST_ADDR)

popw %ax

popw %cx

ret

delay:

outb %al,$0x80

ret

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

新聞標(biāo)題:intelA20地址線-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://www.muchs.cn/article34/djjpse.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷型網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作虛擬主機(jī)、網(wǎng)站導(dǎo)航網(wǎng)頁設(shè)計(jì)公司、微信公眾號(hào)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)