ぶうううん's Cafe

どうにかこうにか。備忘録に近い。

おまじない[INSTRSET "i486p"]

Summary

 お久しぶりです。ぶうううんです。現在、「30日OS本」をやっております。つい先ほど、悩まされたことを記事にしたいと思います。

What happened?

 30日OSの14日目、harib11eにて、asmhead.nasを改良しておりました。しかしながら、デバッグに苦労。原因がおまじない[INSTRSET "i486p"]であることが判明。無事にデバッグを完了したのでした。

Reason

 30日OS本で使用するnaskはnasmを改良して作られたアセンブラです。nask、nasm共に標準で16bit前提の機械語を出力します[1]。よって、32bitレジスタを使用する前には、おまじない[INSTRSET "i486p"]が必要となります。
 harib11dまでは、プロテクトモードへ移行する直前(要するに32bitレジスタを使用する前)に[INSTRSET "i486p"]を宣言すれば良かったのですが、harib11eでは改良の結果、プロテクトモードへ移行する前に書くMOV EAX, [ES:DI+0x28]の前までに宣言が必要となったのです。

Finally

 考えてみれば当たり前の話ですね...。初歩的なミスに時間をかけてしまった...けれどこれで開発を進められます。

Cited from

[1]