BIOS で Hello World!
bochsを使ってHello World! - ラシウラ
このエントリを参考に、これとはちょっと違う方法で BIOS で Hello World!を出力してみた。
アセンブラは yasm、実行には Q.app(qemu) を使った。
org 0x7C00 ; start address for BIOS start: ; get current cursor position mov ah, 0x03 mov bh, 0 int 0x10 ; dh = y-coordinate, dl = x-coordinate ; print hello mov ah, 0x13 mov al, 0x01 mov bh, 0 mov bl, 0x07 ; set color white mov cx, msgend-msg ; sizeof(msg) mov bp, msg int 0x10 end: jmp end msg: db 'Hello World!' msgend: padding: times 510-($-$$) db 0 dw 0xAA55
BIOSコールについてはここが参考になる。
http://community.osdev.info/index.php?(AT)BIOS
http://hp.vector.co.jp/authors/VA003720/lpproj/int10h/int10h.htm
俺が知らなかった org や times, $, $$, db のドキュメント。
http://www.tortall.net/projects/yasm/manual/html/objfmt-bin.html
http://www.tortall.net/projects/yasm/manual/html/nasm-pseudop.html
http://www.tortall.net/projects/yasm/manual/html/nasm-expr.html
次にブートイメージの作成
% yasm -f bin -o hello.bin hello.s % dd if=/dev/zero of=fd.img bs=512 count=2880 % dd if=hello.bin of=fd.img conv=notrunc
この後、Q.app で新しく仮想PCを作り、
Hardware -> Floppy でさっき作った fd.img を選び、Boot from を floppy にして起動。
Q.app のメッセージの次に正しく Hello World! が出力された。