プログラミング関連での備忘録なんかを載せています。
カレンダー
10 | 2024/11 | 12 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
プロフィール
HN:
たっく
年齢:
42
性別:
男性
誕生日:
1982/03/11
職業:
システムエンジニアなの?
おすすめ
最新コメント
最新記事
(11/15)
(11/15)
(11/15)
(11/08)
(11/07)
最新トラックバック
ブログ内検索
最古記事
(11/06)
(11/07)
(11/07)
(11/07)
(11/07)
アクセス解析
2日目 その2です。
2日目 その1までで、大分プログラムらしくなりましたが、
未だにブートセクタ以外の場所が残っています。
これは、調べてみるとどうやらFAT12フォーマットの仕様の部分を、アセンブラで直接書き込んでいるのが原因の様です。
1日目のソースの、
; 以下はブートセクタ以外の部分の記述 DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 TIMES 4600 DB 0 DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 TIMES 1469432 DB 0
の部分ですね。
これは何を意味しているのか分かりませんが、うちのPCのVMWareに入っているWIndows 7 RC版でフロッピーディスクのイメージをフォーマットして、バイナリエディタでそのイメージを開いて見たところ、512Byte目から「F0 FF FF 00」、5120Byte目から「F0 FF FF 00」がありました。
よくわからないけど、FAT12の仕様だと言うことで今のところは納得しようと思います。
で、この部分をわざわざアセンブラで記述しているのが無駄だと言うことで、今回はブートセクタ部分の最初の512Byteだけをアセンブラで作るように変更します。
ここでですが、私の環境は以前にも言いましたがUbuntuです。
「30日でできる!OS自作入門」はWindowsを想定して書かれていて、ちょくちょく作者が作ったWindowsのツールが出てきます。
今回も、読み進めて行ったところedimg.exeという作者が作ったツールを使っています。
ですが、私は使いたくありません。
一応、やっている事はブランクディスクのイメージを読み込んで、先頭の512byteの部分にアセンブラで作ったブートセクタを書き込むと言う説明が書いていましたが、その読み込み元のブランクディスクイメージが、59byteしかなく、中身をみてもFAT12フォーマットと言うわけでもなく、よく分かりませんでした。
と言うことで、以下の方法をとろうと思います。
- 2日目まででできているフロッピーイメージの512Byte未満の部分を削除して、このバイナリファイルをsrc.binとして保存します。(このファイルは今後も使うかもしれないのでとっておきます。)
- アセンブラでブートセクタをアセンブルします。(ipl.binという名前にします)
- catコマンドを使用して、アセンブル結果とsrc.binを結合します。(cat ipl.bin src.bin > helloos4.imgという感じです)
早速ソースの修正をします。
まぁ、やることはを上で書いたソース部分を削除するだけなんですが・・・・・
賛否両論あると思いますが、私の場合は、書いたソースをなかなか消す事ができません。
なので、今回はソースを消すのではなく、コメントアウトします。
※IBMの人とコードレビューをしたことがあるのですが、その人はいらない部分は削除するべきって言っていました。まぁ、反対はしません。ここでは、本当にいらなくなれば自然ときえるでしょ〜っていうスタンスで行きます。
これでアセンブルします。
そして、今回からのコマンド、
cat ipl.bin src.bin > helloos4.img
を実行します。
これで、 helloos4.imgが作成されたので、VMWareで実行してみます。
まぁ、大したことしていないので普通に実行できました。
とりあえずこれで、アセンブルするのはブートセクタの512Byteだけになったので、解析しやすいようにリストファイルと言うものを出します。
nasmに一つオプションをつけます。
$ nasm helloos3.asm -o ipl.bin -l ipl.lst
これを実行すると、ipl.lstと言うファイルが出来上がりました。
中身を覗いてみると・・・あれまー、超便利。
こ〜んな感じでどんな機械語に変換されたかが一目瞭然です。
最後にMakefileを作ります。
私の環境にはすでにmakeコマンドが入っているので、Makefileを作るだけでした。
どうせならディレクトリも分けておこうと思い、srcとかbinとかのディレクトリを作成し、Makefileを以下の様に作りました。
# フロッピーディスク作成 helloos.img : ./bin/ipl.bin Makefile cat ./bin/ipl.bin ./bin/src.bin >./bin/fdimage/helloos.img ./bin/ipl.bin : ./src/ipl.asm Makefile nasm ./src/ipl.asm -o ./bin/ipl.bin -l ipl.lst clean : rm -f ipl.lst rm -f ./bin/ipl.bin rm -f ./bin/fdimage/*.img
これで、makeを実行すればフロッピーディスクのイメージファイルが自動的にできます。
2日目の内容は以上です。
今回の内容としては難しいところはあまりありませんでした。
次回は、「32ビットモード突入とC言語導入」です。
いよいよC言語がでてきます。
PR
この記事にコメントする