2009年10月18日 星期日

[NASM] BIOS 啟動程序

當電腦的電源開啟後,處理器會進入 reset 狀態,此時:
  1. 所有記憶體的內容會變為 0

  2. CS 的值會被預設為 0FFFF[0]H

  3. IP(Instruction Pointer) 儲存指令的 offset,預設為 0

結合 2 & 3(Code Segment + Offset),可以知道第一個要執行的指令的 memory address 為 0FFFF0H(CS:IP),而這個 memory address 即為 BIOS 的進入點。

BIOS 的常式位於 0FFF0H,他檢查各個 I/O port,並對於存在的設備進行初始化,接著 BIOS 會建立兩個資料區:
  1. Interrupt Vector Table (中斷向量表)
    長度為 1 KB,用來做為當 interrupt(中斷) 發生時,BIOS & OS 用來選擇相對應的 interrupt handler 之用,詳細資料可參考此篇文章

  2. BIOS 資料區
    起始位址為 40[0]H,大小依據設備的多寡而不同。

接著 BIOS 會檢查系統磁碟是否存在,並從系統磁碟下載啟動程式,啟動程式接著從系統磁碟將系統檔案載入 memory,並將控制權交給 OS。

沒有留言:

張貼留言