[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[OSASK 2743] Re: ぐいぐいプログラミング質問



  こんにちは、川合です。


I.Tak. さんは 2001/12/14 22:48:15 の「[OSASK 2740] ぐいぐいプロ
グラミング質問」で書きました:

> ぐいぐい00仕様について質問です。

  とてもよい質問です。喜んでお答えしましょう。

> レジスタの初期値はどうなっていますか?
>セグメントレジスタはどれとどれが同じとか、汎用レジスタは0クリアされ
>ているとかは、当てにしてもいいのですか。

  はい。仕様では、以下の通りです。

    EAX = ECX = EDX = EBX = ESP = EBP = ESI = EDI = 0;
    CS = 0x0007;
    ES = SS = DS = FS = 0x000f;
    GS = 未定;
    EIP = 0;
    CF = PF = AF = ZF = SF = DF = OF = 0; /* EFLAGS */

  これらは仕様として保証している値ですので、あてにしていいです。
なお、セグメントレジスタの値は、読み取ったら下位2ビットが0クリア
されているかもしれません。その辺はIA-32の仕様に依存します(CPL=3
で走ることはぐいぐい00仕様が保証します)。

> pioneerを呼んだ後はどうですか?
>一般コマンドではEBXに入っている値が終了コマンドを指していると保証され
>ますか。フラグは変わりますか。

  一般コマンドでは、EBXが終了コマンドを指します(エラーが無い場
合)。フラグは基本的に保存されません。

>そして、特別コマンド(tek0とか)ではどうですか。

  特別コマンドは、いろいろややこしくなっています(だから特別なん
ですが・・・笑)。とりあえず、何も保証していないという事にしてく
ださい(いや、ある程度は保証している値があるのですが、どれがどれ
だかちょっとすぐには分かりません)

> 特にEBXが当てにできるとできないとでは、2バイトの差が出ます(^^;;;

  なるほど、確かにそうですね。予想がつきました(笑)。

>ちなみにcolorは圧縮して224バイトに縮みました(281から2割減!)。
>こういう遊びが好きです。

  うーん、僕も好きです(笑)。・・・言い訳がましいことを書いてお
くと、僕は学習用のサンプルという枠をはみ出さないように自制したの
で、color1は限界には達していません(そもそも、forループを使うべ
きじゃないです。do-whileにすべきです)。

  でも、224バイトにはできないかもしれません。ちょっと自信ないで
す(笑)。縮みきったら、公開してくださいね。勉強させていただきま
すから。・・・なんなら、バンドルアプリケーションのいくつかをいじ
ってくださってもいいです。小さい方を採用しますから(ABALLはそろ
そろバンドルをやめる予定なので、改良しなくていいです)。

  ええと、2バイトすら重要というレベルに達しているようなので、あ
と6バイトほどプレゼントします(笑)。ヘッダの32バイトのうち、最
初の8バイトはどのように使ってもいいです。残りの24バイトは意味が
あるので、勝手な値にしてはいけません(リザーブのところは必ず0に
しておくこと)。

---

  ・・・それで、実は、僕も血が騒いだのでやってみました(笑)。と
りあえず、205バイトまでは行きました。えへへ。


  それでは。

--
    川合 秀実(KAWAI Hidemi)
川合堂社長 / OSASK計画総指揮 / カーネル開発班
E-mail:kawai !Atmark! imasy.org
Homepage http://www.imasy.org/~kawai/