首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

從零構建軟盤鏡像工具:啟動扇區寫入與迷你 OS 內核實驗

     編輯:關於VC++

為深入理解 x86 計算機啟動流程,作者自行開發 Windows 下的軟盤鏡像生成與寫入工具,並配合 NASM 編譯的引導扇區代碼,在 VMware 中成功跑起一個能在螢幕顯示 "Hello, OS world!" 的迷你作業系統原型。

工具原理與介面

核心流程:讀取源檔案 → 按軟盤扇區格式 (512 bytes/sector) 生成 .img 鏡像 → 以扇區為單位寫入軟盤 A:。介面提供三大功能:生成鏡像、寫入軟盤、引導扇區裁剪。

關鍵代碼解析

生成鏡像 (FuncGenImageFile)

  • 建立輸出檔,依序讀取列表中源檔案寫入
  • 第 0 扇區 (引導扇區) 特殊處理:強制補齊 512 字節,尾部植入 0x55AA 簽名
  • 其餘檔案按實際大小寫入,選項控制是否以零填充至 1.44MB 標準軟盤容量

寫入軟盤 (FuncWriteFlopy)

  • 以 CreateFile("\\\\.\\A:") 獨佔打開軟驅
  • 分塊讀取 .img 並以 WriteFile 逐扇區寫入 (共 80軌×18扇區×2面=2880扇區)
  • 支援提前結束(鏡像小於滿盤)或強制寫滿模式

迷你 OS 開發實錄

PC 啟動鐵律

  1. POST 自檢 → BIOS 引導程式將 0 磁道 0 扇區 (MBR) 載入 0x7C00
  2. 若尾兩字節為 55 AA,CPU 跳轉至 CS:IP = 0x07C0:0x0000 執行

工具鏈選擇:NASM

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 進階教程。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved