1. 程式人生 > >自己動手寫作業系統學習筆記(一)

自己動手寫作業系統學習筆記(一)

早就想抽時間系統的學習一下於淵寫的《自己動手寫作業系統》,但始終沒空,現在忙活一年,年底終於有點空閒,今天終於把書裡的第一個例子在windows下搞成功.這裡把實驗步驟記錄一下.

實驗全部在win7環境下進行,用到軟體版本和下載地址為:

Win64位Bochs 下載地址:

nasm64位下載地址:

dd for windows下載地址:

實驗步驟

1、編寫boot.asm檔案

首先仿照書上寫一個boot.asm,程式碼如下

         org   07c00h                      ;告訴編譯器程式載入到7c00處

         mov ax, cs

         mov ds, ax

         mov es, ax

         call   DispStr                      ;呼叫顯示字串例程

         jmp  $                        ;無限迴圈

DispStr:

         mov ax, BootMessage

         mov bp, ax                        ;ES:BP = 串地址

         mov cx, 16                        ;CX = 串長度

         mov ax, 01301h               ;AH = 13,  AL = 01h

         mov bx, 000ch                  ;頁號為0(BH = 0) 黑底紅字(BL = 0Ch,高亮)

         mov dl, 0

         int    10h                    ;10h 號中斷

         ret

BootMessage:                 db    "Hello,OS world!"

times      510-($-$$)       db    0       ; 填充剩下的空間,使生成的二進位制程式碼恰好為512位元組

dw 0xaa55                               ; 結束標誌

然後在命令列下進行編譯(編譯之前記得把nasm.exe和dd.exe的安裝路徑加入path系統變數中)

nasm boot.asm -o boot.bin

成功的話在本目錄下生成一個boot.bin檔案

編譯過程如下圖所示



2. 生成.img檔案

具體編譯命令為

dd if=boot.bin of=a.img bs=512 count=1  conv=notrunc

執行效果如下圖


3. 編寫bochs配置檔案

編寫一個bochs.bxrc檔案內容為

#bochs 2.6.8的語法發生了變化,導致書中的檔案無法使用

#現在的本配置檔案方案來自http://blog.csdn.net/furzoom/article/details/52484413

# how much memory the emulated machine willhave 

megs: 32 

# filename of ROM images 

# BIOS已經修改,地址可以不加,可以根據檔案大小進行推斷,如里加地址要與檔案大小相匹配 

romimage:file=$BXSHARE/BIOS-bochs-latest 

vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest 

# what disk images will be used  

# 配置映象名 

floppya: 1_44=a.IMG, status=inserted 

# choose the boot disk. 

boot: a 

# where do we send log messages? 

log: bochsout.txt 

# disable the mouse, since Finix is textonly 

mouse: enabled=0 

# enable key mapping, using US layout asdefault. 

# 鍵盤的對映方式也改變了 

keyboard:keymap=$BXSHARE/keymaps/x11-pc-us.map

4.啟動bochs ,畫面如下所示


然後單擊load按鈕,選中剛才的bochs.bxrc檔案,再單擊start 按鈕,就可以出現一個模擬器視窗,看到執行效果,

如下圖綠色畫圈出所示。注意這個模擬器視窗無法關閉,想退出的話只能關閉原始的bochs視窗,則兩個視窗一起關掉.至此實驗結束