為什麼主引導記錄的記憶體位址是0x7C00?

2022-08-29 02:24:10 字數 2119 閱讀 2170

**出處

《計算機原理》課本說,啟動時,主引導記錄會存入記憶體位址0x7c00。

這個奇怪的位址,是怎麼來的,課本就不解釋了。我一直有疑問,為什麼不存入記憶體的頭部、尾部、或者其他位置,而偏偏存入這個比 32kb 小1024位元組的地方?

昨天,我讀到一篇文章,終於解開了這個謎。

首先,如果你不知道,主引導記錄(master boot record,縮寫為mbr)是什麼,可以先讀《計算機是如何啟動的?》。

簡單說,計算機啟動是這樣乙個過程。

通電

讀取rom裡面的bios,用來檢查硬體

硬體檢查通過

bios根據指定的順序,檢查引導裝置的第乙個扇區(即主引導記錄),載入在記憶體位址 0x7c00主引導記錄把操作權交給作業系統

所以,主引導記錄就是引導"作業系統"進入記憶體的一段小程式,大小不超過1個扇區(512位元組)。

0x7c00這個位址來自intel的第一代個人電腦晶元8088,以後的cpu為了保持相容,一直使用這個位址。

2023年8月,ibm公司最早的個人電腦ibm pc 5150上市,就用了這個晶元。

當時,搭配的作業系統是86-dos。這個作業系統需要的記憶體最少是32kb。我們知道,記憶體位址從0x0000開始編號,32kb的記憶體就是0x0000~0x7fff

8088晶元本身需要占用0x0000~0x03ff,用來儲存各種中斷處理程式的儲存位置。(主引導記錄本身就是中斷訊號int 19h的處理程式。)所以,記憶體只剩下0x0400~0x7fff可以使用。

為了把盡量多的連續記憶體留給作業系統,主引導記錄就被放到了記憶體位址的尾部。由於乙個扇區是512位元組,主引導記錄本身也會產生資料,需要另外留出512位元組儲存。所以,它的預留位置就變成了:

0x7fff

-512

-512+1

=0x7c00

0x7c00就是這樣來的。

計算機啟動後,32kb記憶體的使用情況如下。

+-

----

----

----

----

----

0x0| interrupts vectors

+---

----

----

----

----

--0x400

| bios data area

+---

----

----

----

----

--0x5??

| os load area

+---

----

----

----

----

--0x7c00

| boot sector

+---

----

----

----

----

--0x7e00

| boot data/stack

+---

----

----

----

----

--0x7fff

|(not used)

+---

----

----

----

------(

...)

(完)

為什麼C語言訪問記憶體位址需要指標?

1 當記憶體收到這一串訊號時,電路中的某8個儲存單元就會響應,這8個儲存單元會記住代表 123 的開 on 或關 off 的電訊號。為什麼是8位呢?這是因為指令裡指定了 byte 如果將byte換成word,那麼123將會被解釋成乙個16位的數值。mov byte 678 1232 mov指令有乙個...

為什麼顯示卡在記憶體中的對映是0b8000H

視訊記憶體基位址雖然是人為確定的,但真要追究原因的話,還是可以找到一些原因的。首先,16位時代8086的定址範圍是0000 0000 ffff 000f,最早劃給ram的區域是640kb,範圍0000 0000 9fff 000f,這在第一代ibm x86 pc時代基本就定下來了。剩下的區域要划給b...

為什麼C語言中使用的位址是假的

在c語言中,指標變數的值就是乙個記憶體位址,運算子的作用也是取變數的記憶體位址,請看下面的 include include int a 1,b 255 int main 在 c free 5.0 下執行,結果為 pa 0x402000,b 0x402004 中的 a b 是全域性變數,它們的記憶體位...