組合語言簡介處理器BIOS啟動程式微軟組譯器組合語言DOSWindowsVisualStudioGNUGNU 組譯器C 轉組語連結 C 語言嵌入 C 語言訊息相關網站參考文獻最新修改簡體版English |
簡介在本文中,我們將示範如何撰寫一個小型的 IBM PC (x86) 啟動程式。但或許稱這個程式為啟動程式有點太過頭了,其實我們只是要寫一個開機時可以印出 “Hello, Booter!” 訊息的程式罷了。 在PC一開機時,BIOS中就具有一個小型的啟動程式 (第一層啟動程式),該啟動程式會根據CMOS的開機設定,嘗試載入光碟、軟碟或硬碟的啟動磁區,然後載入該磁區並執行其中的程式,這個啟動磁區中的程式就是PC的第二層啟動程式。 通常,這個啟動磁區的程式會進一步載入作業系統,像是 DOS、MS. Windows或 Linux。但是,在本節中,我們並不嘗試載入作業系統,只是單純的於啟動後,在螢幕上印出 “Hello, Booter !” 的訊息而已。 啟動程式的組合語言現在,就讓我們來撰寫一個簡單的PC啟動程式,如範例 1 所示,該程式的來源為楊文博的《使用開源軟體-自己動手寫作業系統》 一書的第二章,該書有免費的電子版,您可於網路上直接下載。 範例 1. 個人電腦 PC 的小型啟動程式 (檔案名稱: boot.s)
啟動程式的連結檔要讓這個啟動程式執行,必須使用連結檔,將程式連結到 PC的啟動位址 0x7C00上,然後定義啟動位址的符號 (在 Cygwin 中的啟動符號為 c,但在Linux 中的啟動符號為 _ftext),範例 2 顯示了該啟動程式的連結檔 boot.ld,由於筆者是在 Cygwin底下操作的,因此,啟動符號設定為 c。 範例 2 啟動程式的連結檔(Link Script) (檔案名稱: boot.ld)
啟動程式的專案檔接著,我們必須撰寫專案檔,以便進行編譯、連結等工作,範例 6.27顯示了該啟動程式的專案檔 (Makefile),讀者可以利用 make 指令,重建該啟動程式專案。 範例 3 啟動程式的專案檔 (Makefile) (檔案名稱: Makefile)
您可以使用 make 指令建置該專案,範例 6.28是我們在 Cygwin 環境中建置該啟動程式的過程,建置完成後,會有一個大小為 1.44MB 的檔案 boot.img產生。 使用 VirtualPC 執行該啟動程式範例 4. IBM PC 啟動程式的建置過程 (在 Cygwin 中建置 IBM PC 的啟動程式)
您也可以將此映像檔轉錄到1.44MB的軟碟片當中,然後重新啟動電腦 (請注意必須於開機後設定成以軟碟機啟動的開機順序),就會看到電腦上出現紅色的 Hello, Booter ! 字樣。 但是,現在許多PC都已經沒有軟碟機了,因此,較為通用的方法是使用像是 VMWare、VirtualPC、VirtualBox 等虛擬機器,然後,用這個檔案就可以作為軟碟映像檔,將其作為虛擬的軟碟機使用。 當您在 Virtual PC 中建立了一個新的虛擬機器之後,就可以啟動該虛擬機器,然後按下『Floppy/Capture Floppy Disk Image…』的功能,接著選取方才所產生的 boot.img 檔作為虛擬軟碟片 (如圖 2 所示),然後,按下『開始』按鈕,您就會看到如圖 3 所示的執行結果,在螢幕上出現 “Hello, Booter !” 的紅色字樣。這便是範例 1 的執行結果。 圖 2. 在 Virtual PC 中設定 boot.img 為虛擬軟碟機的畫面 圖 3. 映像檔 boot.img 在 Virtual PC 中的執行結果 參考文獻
|
個人電腦 (x86) 的最小啟動程式
page revision: 5, last edited: 11 Oct 2010 07:06
Post preview:
Close preview