天天看點

自制作業系統-0

從零開始寫一個作業系統相信是很多程式設計愛好者的夢想。以前也下載下傳過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下運作

在建立的作業系統的設定中新增硬體軟碟

自制作業系統-0

啟動

自制作業系統-0

五.最後

代碼還是不太懂,尤其是那一堆16進制數。加油!
           

繼續閱讀