🌟 核心目標

了解電腦按下開機鍵後,是如何找到我們的代碼並開始執行的,同時親手寫下第一個能直接在硬體(模擬器)上運行的 Hello OS


1. 理解啟動流程 (The Boot Process)

在進入代碼之前,我們必須先知道電腦開機後的「接力賽」是如何進行的:

  1. BIOS/UEFI 初始化:按下電源後,CPU 會跳轉到主機板上的 BIOS 固件,進行硬體自檢(POST)。
  2. 尋找啟動磁區:BIOS 會掃描硬碟、隨身碟的第一個磁區(Sector 0,共 512 Bytes)。
  3. 魔術數字 (Magic Number):BIOS 會檢查這 512 Bytes 的最後兩個位元組是否為 0x550xAA
  4. 載入記憶體:如果標誌正確,BIOS 就會將這 512 Bytes 的內容載入到物理記憶體地址 0x7C00,並將控制權交給它。

2. 實作:撰寫第一個 Bootloader

我們將使用 x86 彙編語言(Assembly)撰寫一個簡單的程式,利用 BIOS 中斷服務在螢幕上顯示 "Hello"。

建立 boot.asm

[org 0x7c00]          ; 告訴編譯器,這段代碼預計會被載入到記憶體地址 0x7c00

mov ah, 0x0e          ; BIOS 中斷服務 10h:顯示字元 (Teletype mode)
mov al, 'H'           ; 將字元 'H' 存入 al 寄存器
int 0x10              ; 呼叫中斷,由 BIOS 負責把字元印在螢幕上
mov al, 'e'
int 0x10
mov al, 'l'
int 0x10
mov al, 'l'
int 0x10
mov al, 'o'
int 0x10

jmp $                 ; $ 表示當前地址,這行會讓 CPU 在這裡無限循環,防止跑飛

; 填充與簽名
times 510-($-$$) db 0 ; 用 0 填充剩餘空間,確保檔案總大小剛好為 510 字節
dw 0xaa55             ; 最後 2 字節:寫入啟動標誌 (0x55, 0xAA)

3. 編譯與執行

現在我們要將人類可讀的 .asm 檔轉換為機器可讀的 .bin 二進制檔。

第一步:編譯

打開終端機(WSL2),輸入:

nasm -f bin boot.asm -o boot.bin