天天看點

學習如何寫一個作業系統(一) - hello world學習如何寫一個作業系統(一) - hello world

學習如何寫一個作業系統(一) - hello world

0.前言

​ 最近跟着《30 天自制作業系統》學習寫作業系統。在這裡記錄一下,如有錯誤,歡迎指正。

​ 别攔我,今天這個坑,我是挖定了。

1.準備工作

  1. 需要了解的一些知識

    計算機是如何啟動的

    關于主引導記錄的記憶體位址0x7C00

    感謝以上兩篇部落格作者的講解。

  2. 工具

    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. 源碼解釋

​ 下面我們對以上代碼中的一些内容進行解釋。

  1. ORG 它告訴nasm,在開始執行的時候,把這些機器語言指令裝載到記憶體的那個位址。至于為什麼是0x7c00,請看上面準備工作的第二篇部落格。
  2. INT 0x10 BIOS 的 0x10 中斷是顯示一個字元,具體使用如下

    AH=0x0e AL=要顯示字元的位址 BH=0 BL=顯示字元的顔色 INT 0x10

4.編譯并在虛拟機中運作

1.編譯 nasm boot.asm -o boot.img

2.建立一個虛拟機

學習如何寫一個作業系統(一) - hello world學習如何寫一個作業系統(一) - hello world

3.添加一個軟碟控制器

學習如何寫一個作業系統(一) - hello world學習如何寫一個作業系統(一) - hello world

4.添加軟碟并啟動虛拟機

學習如何寫一個作業系統(一) - hello world學習如何寫一個作業系統(一) - hello world

5.結果

學習如何寫一個作業系統(一) - hello world學習如何寫一個作業系統(一) - hello world

5. 參考

​ 《30天自制作業系統》

繼續閱讀