文章出處

《30天自制操作系統》筆記(01)——hello bitzhuwei's OS!

最初的OS代碼

 1 ; hello-os
 2 ; TAB=4
 3 
 4         ORG        0x7c00            ; 指明程序的裝載地址
 5 
 6 ; 以下這段是標準FAT12格式軟盤專用的代碼
 7 
 8         JMP        entry
 9         DB        0x90
10         DB        "HELLOIPL"        ; freeparam 啟動區的名稱可以是任意的字符串(8字節)
11         DW        512                ; 每個扇區(sector)的大小(必須為512字節)
12         DB        1                ; 簇(cluster)的大小(必須為1個扇區)
13         DW        1                ; FAT的起始位置(一般從第一個扇區開始)
14         DB        2                ; FAT的個數(必須為2)
15         DW        224                ; 根目錄的大小(一般設成224項)
16         DW        2880            ; 該磁盤的大小(必須是2880扇區)
17         DB        0xf0            ; 磁盤的種類(必須是0xf0)
18         DW        9                ; FAT的長度(必須是9扇區)
19         DW        18                ; 1個磁道(track)有幾個扇區(必須是18)
20         DW        2                ; 磁頭數(必須是2)
21         DD        0                ; 不使用分區,必須是0
22         DD        2880            ; 重寫一次磁盤大小
23         DB        0,0,0x29        ; 意義不明,固定
24         DD        0xffffffff        ; (可能是)卷標號碼
25         DB        "HELLO-OS   "    ; freeparam 磁盤的名稱(11字節)
26         DB        "FAT12   "        ; 磁盤格式名稱(8字節)
27         RESB    18                ; 先空出18字節
28 
29 ; 程序核心
30 
31 entry:
32         MOV        AX,0            ; 初始化寄存器
33         MOV        SS,AX
34         MOV        SP,0x7c00
35         MOV        DS,AX
36         MOV        ES,AX
37 
38         MOV        SI,msg
39 putloop:
40         MOV        AL,[SI]
41         ADD        SI,1            ; 給SI加1
42         CMP        AL,0
43         JE        fin
44         MOV        AH,0x0e            ; 顯示一個文字
45         MOV        BX,15            ; 指定字符顏色
46         INT        0x10            ; 調用顯卡BIOS
47         JMP        putloop
48 fin:
49         HLT                        ; 讓CPU停止;等待指令
50         JMP        fin                ; 無限循環
51 
52 msg: ; 信息顯示部分
53         DB        0x0a, 0x0a        ; 換行2次
54         DB        "hello, bitzhuwei's OS!"    ; freeparam
55         DB        0x0a            ; 換行
56         DB        0
57 
58         RESB    0x7dfe-$        ; 填寫0x00,直到0x001fe
59 
60         DB        0x55, 0xaa
61 
62 ; 以下是啟動區以外部分的輸出
63 
64         DB        0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
65         RESB    4600
66         DB        0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
67         RESB    1469432
02helloos.nas

 

 

虛擬機加載helloos.img

下載(30天自制操作系統光盤.rar),解壓。

將"OS\projects\01_day\helloos1"文件夾復制到"OS\tolset"文件夾下,如下圖所示。

進入"OS\tolset\helloos1"文件夾,刪除"helloos.nas"文件,然后將上表中的"02helloos.nas"內容保存到此處,并重命名為"helloos.nas"。(即更新helloos.nas文件的內容)

雙擊"!cons_9x.bat"(若后續操作失敗,則雙擊"!cons_nt.bat"重試),在彈出的命令行窗口中輸入"asm",回車;然后輸如"run",回車。

之后你就可以看到QEMU這個虛擬機加載啟動了(以helloos.nas為源代碼生成的)helloos.img這個及其簡單的操作系統,如下圖所示。

真機加載helloos.img

剛剛是用虛擬機啟動的helloos.img這個操作系統,下面介紹如何用物理機器加載啟動之。

制作啟動盤

首先,準備一個U盤,保證里面的數據你都不需要了。

然后,下載一個UltraISO軟件。運行之,打開剛剛生成的helloos.img,如下圖所示。

然后,使用菜單項"啟動-寫入硬盤映像…",如下圖所示。

在彈出的窗口中,確定"硬盤驅動器"中選中的是你準備好的U盤,然后點擊"寫入"按鈕,稍候即可,如下圖所示。

真機啟動

刻錄成功了,就是說啟動盤做好了。下面就重啟電腦,然后選擇從U盤啟動,你就可以看到真機啟動helloos.img了。除了一些細節不同外,和虛擬機加載helloos.img的情況基本一致。

總結

以后繼續編寫OS用虛擬機測試比較方便。

操作系統的hello world就算完成了。

 

 點此查看下一篇《30天自制操作系統》筆記(02)——導入C語言


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()