十分鐘完成一個操做系統-打印Hello world

剛開始學於淵的《一個操做系統的實現》,動手寫一個能夠顯示Hello,World的20行代碼的操做系統,其實只是個引導盤。html

當計算機電源被打開後,它會先進行加電自檢(POST),而後尋找啓動盤,若是是選擇從軟盤啓動,計算機就會查找軟盤的0面0磁道1扇區,若是發現它以0xAA55結束,則BIOS認爲它是一個引導扇區,而後BIOS就會把引導扇區的前512字節的引導代碼拷貝到內存的0000:7c00處並將控制器完全交給這段引導代碼。編程

因書中說明要使用到軟盤,可是在人工智能盛行的2018年哪裏還有軟盤,因此我嘗試下虛擬機上模擬軟盤運行,並最後獲得的本身想要的結果。
如今將本身的操做實踐記下,爲本身和讀者提供參考。函數

前提

本次操做是在Mac電腦上執行的,因此其餘系統可能會有些不一樣。人工智能

  • 系統:MacOSSierra 10.12.6
  • 彙編程序:NASM 0.98.40 (compiled on Apr 10 2017)
  • 虛擬機:VirtualBox 5.1.30
  • 代碼位置:/Users/myname/OS/src/chapter1/a

先寫引導

建立文件名爲boos.asm的引導文件,代碼以下:spa

org 07c00h ;告訴編譯器加載到07c00h處

    mov ax, cs
    mov ds, ax
    mov es, ax

    call DispStr ;調用顯示字符串函數

    jmp $; 無限循環

DispStr:
    mov ax, BootMessge
    mov bp, ax
    mov cx, 16
    mov ax, 01301h
    mov bx, 000ch
    mov dl, 0
    int 10h
    ret
BootMessge: db "hello world!"
times 510 - ($ - $$) db 0
dw 0aa55h

製做鏡像文件

  • 編譯代碼生成boot.bin文件操作系統

    • nasm boot.asm -o boot.bin
  • 製做一個包含boot.bin的鏡像文件boot.imgcode

    • dd if=boot.bin of=boot.img bs=512 count=1

作好了大小爲512B的包含如上引導代碼的鏡像文件boot.img。htm

安裝VirtualBox最新版

能夠在百度軟件中心下載VirtualBox的mac版本,下載後直接點擊安裝便可。blog

建立虛擬機內存

VirtualBox

VirtualBox

啓動順序中只選擇軟驅,將啓動EFI選項去掉

VirtualBox

選擇軟盤控制器並添加軟盤,將引導程序添加到虛擬軟盤中。

VirtualBox

點擊OK完成設置,而後點啓動,就能夠看到Hello,World了。

VirtualBox

參考文檔

用VMWare運行簡單的引導代碼
相關文章
相關標籤/搜索