了解電腦按下開機鍵後,是如何找到我們的代碼並開始執行的,同時親手寫下第一個能直接在硬體(模擬器)上運行的 Hello OS。
在進入代碼之前,我們必須先知道電腦開機後的「接力賽」是如何進行的:
0x55 和 0xAA。0x7C00,並將控制權交給它。我們將使用 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)
現在我們要將人類可讀的 .asm 檔轉換為機器可讀的 .bin 二進制檔。
打開終端機(WSL2),輸入:
nasm -f bin boot.asm -o boot.bin