為深入理解 x86 計算機啟動流程,作者自行開發 Windows 下的軟盤鏡像生成與寫入工具,並配合 NASM 編譯的引導扇區代碼,在 VMware 中成功跑起一個能在螢幕顯示 "Hello, OS world!" 的迷你作業系統原型。
核心流程:讀取源檔案 → 按軟盤扇區格式 (512 bytes/sector) 生成 .img 鏡像 → 以扇區為單位寫入軟盤 A:。介面提供三大功能:生成鏡像、寫入軟盤、引導扇區裁剪。
FuncGenImageFile)0x55AA 簽名FuncWriteFlopy)CreateFile("\\\\.\\A:") 獨佔打開軟驅WriteFile 逐扇區寫入 (共 80軌×18扇區×2面=2880扇區)0x7C0055 AA,CPU 跳轉至 CS:IP = 0x07C0:0x0000 執行TASM 編譯的引導碼去除 DOS 頭後無法運行,改用 NASM (nasm boot.asm -o boot.bin) 即解決。
boot.asm)org 07c00h
mov ax, cs; mov ds, ax; mov es, ax
call DispStr
jmp $
DispStr:
mov ax, BootMessage; mov bp, ax
mov cx, 16; mov ax, 01301h; mov bx, 000ch; mov dl, 0
int 10h; ret
BootMessage: db " Hello, OS world!"
times 510-($-$$) db 0
dw 0aa55h
關鍵點:org 07c00h 指定載入地址,int 10h/ah=13h 顯示字串,times 填充至 510 字節,dw 0aa55h 植入啟動簽名(注意小端序存儲為 55 AA)。
按工具流程將 boot.bin 生成鏡像並寫入軟盤 (或 VMware 虛擬軟盤),重啟選擇軟盤啟動即見成果。後續可擴展:硬盤扇區讀取、中斷向量替換、文件系統實現、保護模式切換等,推薦參考 oldlinux.org 進階教程。