3.計算機上電 到 BIOS 再到 MBR的過程詳解

本文結合博文–計算機是如何啓動的?效果更佳。

0. 載入內存

首先明確一個概念:載入內存,包含兩個部分:

  1. 程序被加載器(軟件或硬件)加載到內存的某個區域。
  2. CPU 的 CS:IP 寄存器被指向這個程序的起始地址。

1. BIOS (Base Input & Output System)

爲什麼稱爲基本輸入輸出系統?
答:BIOS 只有 64KB 的空間,所以實現的功能是很少的,包括(檢測一些基本的硬件,然後在內存中 0x000 ~ 0x3FF建立數據結構,中斷向量表IVT並填寫中斷例程。)

上電後先進入實模式,在實模式下地址空間是 1MB的(20根地址線)。

先看一下實模式下的內存佈局
在這裏插入圖片描述
這 1MB 的地址空間不全是對應於DRAM內存的,而是不同的存儲設備
其中F0000 ~ FFFFF 對應的正是 BIOS,這部分對應的存儲空間不是內存條,而是ROM。
000 ~ 9FFFF 的 640KB 的空間對應到DRAM,即內存條。

地址映射
在這裏插入圖片描述
過程

  1. 計算機一上電,CS:IP 寄存器被強制初始化爲 0xF000:0xFFF0,所以從 ROM 中的 BIOS 開始執行指令。 (物理地址就是0xFFFF0,此處距離 1MB 的空間還有 16個字節,執行的是一個跳轉指令)。
    如下圖所示:
    物理地址0xFFFF0 中的指令是跳轉指令 jmp f000:e05b。
  2. 跳轉過去之後才真正執行 BIOS 的功能,包括基本硬件的檢測與初始化,然後在內存中 0x000 ~ 0x3FF建立數據結構,中斷向量表IVT並填寫中斷例程。
  3. BIOS 的最後一項工作是校驗啓動盤中位於 0 盤 0 道 1 扇區的內容。檢查最後兩個字節是否是魔數 0x55 和 0xaa。如果是,BIOS 認爲存在可執行程序 MBR ,便把 MBR加載到物理地址 0x7c00 的位置。
  4. 最後通過指令 jmp 0:0x7c00實現跳轉執行MBR的指令。
  5. 至此,BIOS 的任務就結束了,接下來就是 MBR 的任務了

綜上所述,BIOS的入口地址是0xFFFF0,F0000 ~ FFFFF 是640KB的 BIOS。BIOS 存在ROM 裏。
在這裏插入圖片描述

2. MBR(主引導記錄)

主引導記錄(MBR)是被加載到 0x7c00 來執行的,爲什麼是這麼個奇葩地址,這是一個歷史問題,當作魔數來理解好了,不深究。

MBR 纔是咱們真正開始寫的第一個代碼,因爲 BIOS 是廠商已經寫好放在只讀 ROM 裏了。

MBR 的大小必須是 512 字節,且最後兩個字節即 第510字節處和第511字節處必須是 0x55 和0xaa。只有這樣 BIOS 才能知道這是 MBR。

現在可以編寫字節的 MBR了。
根據博文編寫主引導記錄MBR來編寫自己的 MBR。

所實現的 MBR 只是爲了演示這一過程,而沒有實用價值。
在以後的博文中將完善 MBR。

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