爲什麼BIOS將MBR讀入0x7C00地址處(x86平臺下)

對於很多人來講0x7C00這個地址是很神祕的,不知道這是幹什麼的。但是對於瞭解過x86平臺下BIOS啓動過程的人,對這個地址再熟悉不過了。BIOS就是將MBR讀入0x7C00地址,然後進行後續的引導的。操作系統或是bootloader開發者必須假設 他們的彙編代碼被加載並從0x7C00處開始執行。0x7C00的定義對於這個地址,它不屬於Intel x86平臺規範的,而是屬於BIOS規範中定義的內容。0x7C00第一次出現在IBM PC 5150的BIOS處理int 19(19號中斷)的時候,IBM PC 5150是x86(32位)IBM PC/AT系列的祖先,這款PC於1981年發佈,使用了intel 8088(16位)的處理器和16KB的RAM內存,BIOS和微軟的基本指令均放在該內存中。當打開電源,BIOS開始自檢,然後出發19號中斷,在處理19號中斷時,BIOS檢測電腦是否具有軟盤、硬盤或是固定磁盤,如果有任何可以使用的磁盤,BIOS酒吧磁盤的第一個扇區(512B)加載到內存的0x7C00地址處。0x7C00的前身0x7C00地址第一次出現在IBM PC 5150的ROM bios中,在此之前使用的地址是0×200。使用該地址的原因主要有:當時8086中斷向量使用地址爲0×0-0x3FF;86-DOS從0×400處被加載;而它不使用0×200-0x3FF這段中斷向量地址。因此這段0×200-0x3FF地址不能被其他程序使用,Tim Paterson(86-DOS開發者)選擇0×200作爲MBR加載地址。0x7C00的意義他們想留下32kb內更多的空間給操作系統來加載自己;8086/8088使用0×0-0x3FF作爲中斷向量,然後BIOS數據緊隨之後;引導扇區是512字節,但是用於引導程序的棧或數據區域需要多於512字節;因此0x7C00,32kb中的最後1kb被選中。一旦操作系統被引導並開始,引導扇區將一直不會被使用指導重啓,因此操作系統和應用程序可以自由的使用32KB的最後1kb空間。在操作系統被加載後,內存佈局如下:

+——————— 0×0| Interrupts vectors(中斷向量表)

+——————— 0×400| BIOS data area(BIOS的數據區域)

+——————— 0×5??| OS load area(操作系統加載區域)

+——————— 0x7C00| Boot sector(引導區域)

+——————— 0x7E00| Boot data/stack(引導數據/堆棧)

+——————— 0x7FFF| (not used)+——————— (…)

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