コケッココケッコ

コケコッコー

Hello World!を表示するブートローダーを作る

作るもの

画面上にHello World!と表示するブートローダを作る

メモ

  • BIOSはリアルモードで動作するので、16bit命令を使用する必要がある
  • x86では、MBRが0x7c00からロードされるらしい。
  • HDDの1セクタは512byteである
  • MBRの最後の2byteは0xAA55でなければならない。

レシピ

;*********************************
; BootLoader
;*********************************
org   0x7c00
bits  16

Start:
    CALL  PrintString
    
    cli           ; Clear interrupts
    hlt           ; halt the system

PrintChar:
    MOV AH, 0x0E
    INT 0x10 
    RET

PrintString:
    MOV SI, string
    
    string_loop:
    MOV AL, [SI]
    INC SI
    OR AL, AL
    JZ exit_print_string
    CALL PrintChar
    JMP string_loop

    exit_print_string:
    RET
    

string:
    db 'Hello World!', 0

times 510 - ($ - $$) db 0  ; Clear the rest of the bytes with 0
dw 0xAA55         ; Boot signature(2byte)

メモ

上記プログラムを動かす際には、以下のサイトを参考に、Floppy DriveをVirtual Disk Driverを用いて仮想化し、Virutual Box上で動作させた
http://softwaretechnique.jp/OS_Development/setup_for_development2.html
http://softwaretechnique.jp/OS_Development/setup_for_development3.html

割り込みは、INT 10Hを用いた。INT 10Hの仕様は下記サイトを参考にした

http://en.wikipedia.org/wiki/INT_10H

参考文献

http://qiita.com/yoshi-naoyuki/items/fb958e3c914c56baef40 http://www.glamenv-septzen.net/view/614
http://www.pasonisan.com/pc-storage/hdd-512-4ksector.html
http://ja.wikipedia.org/wiki/%E3%83%96%E3%83%BC%E3%83%88%E3%82%BB%E3%82%AF%E3%82%BF
http://viralpatel.net/taj/tutorial/hello_world_bootloader.php
http://www.brokenthorn.com/Resources/OSDev3.html
http://viralpatel.net/taj/tutorial/hello_world_bootloader.php