學習如何寫一個作業系統(一) - hello world
0.前言
最近跟着《30 天自制作業系統》學習寫作業系統。在這裡記錄一下,如有錯誤,歡迎指正。
别攔我,今天這個坑,我是挖定了。
1.準備工作
-
需要了解的一些知識
計算機是如何啟動的
關于主引導記錄的記憶體位址0x7C00
感謝以上兩篇部落格作者的講解。
-
工具
Sublime Text
VirtualBox
nasm (Ubuntu 可以通過 sudo apt-get install nasm 安裝)
2. 代碼
boot.asm
ORG
MOV SI,msg ; 顯示資訊的位址給si(源變址寄存器)
JMP putloop
putloop:
MOV AL,[SI]
ADD SI, ; 給SI加1
CMP AL,
JE fin
MOV AH, ; 顯示一個文字
MOV BX, ; 指定字元顔色
INT ; 調用顯示卡BIOS
JMP putloop
fin:
HLT ; 讓CPU停止,等待指令
JMP fin ; 無限循環
msg:
DB "hello world" ; 換行兩次
DB
RESB ; 填寫0x00直到0x001fe
DB ,
3. 源碼解釋
下面我們對以上代碼中的一些内容進行解釋。
- ORG 它告訴nasm,在開始執行的時候,把這些機器語言指令裝載到記憶體的那個位址。至于為什麼是0x7c00,請看上面準備工作的第二篇部落格。
- INT 0x10 BIOS 的 0x10 中斷是顯示一個字元,具體使用如下
AH=0x0e AL=要顯示字元的位址 BH=0 BL=顯示字元的顔色 INT 0x10
4.編譯并在虛拟機中運作
1.編譯 nasm boot.asm -o boot.img
2.建立一個虛拟機
3.添加一個軟碟控制器
4.添加軟碟并啟動虛拟機
5.結果
5. 參考
《30天自制作業系統》