自己動手寫作業系統學習筆記(一)
早就想抽時間系統的學習一下於淵寫的《自己動手寫作業系統》,但始終沒空,現在忙活一年,年底終於有點空閒,今天終於把書裡的第一個例子在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.map4.啟動bochs ,畫面如下所示
然後單擊load按鈕,選中剛才的bochs.bxrc檔案,再單擊start 按鈕,就可以出現一個模擬器視窗,看到執行效果,
如下圖綠色畫圈出所示。注意這個模擬器視窗無法關閉,想退出的話只能關閉原始的bochs視窗,則兩個視窗一起關掉.至此實驗結束