30天自制作業系統:第一天

因為咱們的目的是為了研究作業系統的組成,所以直接從系統啟動的第二階段的主引導記錄開始。

前提是將編譯工具放在該檔案目錄的同級目錄下,該工具為日本人川合秀實自制的編譯程式,最佳化過的nasm編譯工具。

寫入以下彙編程式碼生成img檔案,然後使用qemu虛擬機器啟動。

; hello-os; TAB=4 DB 0xeb, 0x4e, 0x90 DB “HELLOIPL” ;必須是8個位元組 DW 512 ;一個扇區的大小 DB 1 DW 1 ;fat的起始位置 DB 2 ;fat的個數,必須為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 ” ;必須是11位元組,磁碟的名稱 db “FAT12 ” ;必須是8位元組 磁碟格式名稱 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 “hello, uos” db 0x0a db 0 resb 0x1fe-$ ;$:表示前面已經輸出多少個位元組, 這裡的$等於132 db 0x55,0xaa ; 以下是啟動區以外部分的輸出 DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 RESB 4600 DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 RESB 14694321234567891011121314151617181920212223242526272829303132333435363738394041424344

啟動執行指令碼:

…\z_tools\nask。exe helloos。nas helloos。img

copy helloos。img …\z_tools\qemu\fdimage0。bin

…\z_tools\make。exe -C …\z_tools\qemu

30天自制作業系統:第一天