見出し画像

OSの作り方:1日目(続き)

機械語からアセンブラに少しレベルが上がった。つぎはアセンブラでブートコード書きましょう、と。

バイナリエディタで直接コード記述してましたが、次はアセンブラでブートコードを書くわけですね。NASMを https://www.nasm.us/ から落として来ます。

そして、書籍通りにアセンブラ記述するの面倒くさいので、CD-ROMからソースを落として・・・ってこんなでいいのか。そして、NASMにPATHを通す(環境変数のPATH)。

あれ。エラー。通らない。なんで。

画像1

書籍では 0x1fe-$ で、現在位置から0x1feまでを表すらしいのだが、($-$$)が正しいらしい。$が行先頭、$$がそのセクション最初らしい・・・

画像2

が、次はWarningが出た・・・一筋縄ではいかないなぁ。warningだしなぁ。uninitilizeの領域は0にしたよー的な。無視してもいいんだろね。outputされているし。

念のため、 https://nasm.us/doc/nasmdoc3.html のマニュアル的なのを見てると、RESBはuninitilizeらしい。書籍じゃ0初期化って書いてるけど違うみたい。まぁ、結果として0にしてくれたぽいから、よしとする。

アセンブラの中身は、まず起動に必要な先頭セクタ512バイトの定義。FAT12フォーマットに従う先頭領域。PC98時代に使用されていたやつ。 http://elm-chan.org/docs/fat.html にフォーマットがあって、先頭は0xeb, 0x??, 0x90が決まり文句というか、JUMP命令で、0x??にとぶ。そこにプログラム本体を配置するように調整する必要あり。そして、511バイト目、512バイト目は0x55, 0xAAが決まり文句。これがないと正常な起動セクタとして認識してくれない模様。

早速できあがったイメージを使ってみると、同じようにHello World!

いやー、これ一つ一つ理解していこうとすると、1日じゃ終わりません。

一定の知識ある人が30日なんじゃー・・・


この記事が気に入ったらサポートをしてみませんか?