從零開始寫一個作業系統相信是很多程式設計愛好者的夢想。以前也下載下傳過linux0.11的源代碼,看過一部分,雖然代碼不多,但還是看不懂。
這次借助30天自制作業系統這本書,一定要寫出一個屬于自己獨一無二的作業系統。
一.環境搭建
我自己的系統是linux的,是以整個過程也是在linux下面完成的。
第一步需要一個文本編輯器,我使用的是sublime text3。
第二步需要一個彙編器,nasm。
第三步需要一個虛拟機或者模拟器,qemu,vmware都可以,正好電腦上裝了vmware。
二.編寫代碼
;FAT12格式檔案系統頭部分
DB 0xeb, 0x4e, 0x90
DB "HELLOIPL"
DW 512
DB 1
DW 1
DB 2
DW 224
DW 2880
DB 0xf0
DW 9
DW 18
DW 2
DD 0
DD 2880
DB 0,0,0x29
DD 0xffffffff
DB "HELLO-OS "
DB "FAT12 "
RESB 18
;程式主體
DB 0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7c
DB 0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8a
DB 0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09
DB 0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xeb
DB 0xee, 0xf4, 0xeb, 0xfd
;資訊顯示部分
DB 0x0a, 0x0a
DB "my operating system"
DB 0x0a
DB 0
;原書中使用下面指令,但這個在nasm中不通過,故使用times
;這裡的指令還沒有細細研究
;RESB 0x1fe - $
times 510 - ($-$$) DB 0
DB 0x55, 0xaa
;以下是啟動區外輸出部分
DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
RESB 4600
DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
RESB 1469432
三.彙編
nasm boot.asm -o boot.img
四.在vmware下運作
在建立的作業系統的設定中新增硬體軟碟
啟動
五.最後
代碼還是不太懂,尤其是那一堆16進制數。加油!