mozyのかきおき

mozyの読書感想文や思考置き場

30日でできるOS自作入門【2日目】

f:id:mozy_ok:20181130220523p:plain

概要

これはMozyの1人アドベントカレンダー 2018 の2日目の記事です。

adventar.org

書こうとした経緯は、こちら

mozy-ok.hatenablog.com

今日の内容

今日やったこと

昨日はバイナリエディタでosが起動し、hello worldを出力するまでのファイルを作りました。
今日はアセンブラで再実装してみます。 最初は、DB命令のみで18万行を超える物を書こうかなと思ったけど、やめましたw
なので、RESB命令も使った helloos.nasを作ってみます。
使うのは、この本の著者の方が作った、NASM(なすむ) というアセンブラです。

22行になって短くなりましたね!

DB   0xeb, 0x4e, 0x90, 0x48, 0x45, 0x4c, 0x4c, 0x4f
DB  0x49, 0x50, 0x4c, 0x00, 0x02, 0x01, 0x01, 0x00
DB  0x02, 0xe0, 0x00, 0x40, 0x0b, 0xf0, 0x09, 0x00
DB  0x12, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00
DB  0x40, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x29, 0xff
DB  0xff, 0xff, 0xff, 0x48, 0x45, 0x4c, 0x4c, 0x4f
DB  0x2d, 0x4f, 0x53, 0x20, 0x20, 0x20, 0x46, 0x41
DB  0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x00, 0x00
RESB    16
DB  0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7c
DB  0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8a
DB  0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09
DB  0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xeb
DB  0xee, 0xf4, 0xeb, 0xfd, 0x0a, 0x0a, 0x68, 0x65
DB  0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x77, 0x6f, 0x72
DB  0x6c, 0x64, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00
RESB    368
DB  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xaa
DB  0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
RESB    4600
DB  0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
RESB    1469432

ハマりポイント

最初に18万行を書こうと思い立って、さすがにむりやと気付いた部分w

知ったこと

  • DB命令とは

    • data byte の略
    • つまりファイルの内容を1バイトだけ直接書く命令です
    • このDB命令さえあればどんなデータもどんなプログラムも記述できる
    • そんな訳でアセンブラに作れないファイルはない
  • RESB命令とは

    • reserve byte の略
    • とりあえずここに10バイトほど開けておいてくださいという意味で
    • RESB 10 のようにつかう
    • こう書いたら10バイトは予約済みとなる
    • 今回は単に開けておくだけではなく、開けた部分を 0x00 で埋める用途で使っている
    • そのためこの命令のおかげで18万行も書かなくてすむようになった ( スゴイ
    • 最後の行 RESB 1469432 は圧巻だよね