おまじない[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]