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

[OSASK 2786] Re: Smaller color



Hidemi KAWAI さん、こんにちは。I.Tak. です。

 bedit はデバッガだと感じるとともに、マシン語の知識と kill コマンド
が欲しくなる今日この頃です。

Sun, 23 Dec 2001 06:22:10 -0000 の
[OSASK 2781] Re: Smaller color
に返信です。

>  スタックを使うという方法を思い付きました。これはどうでしょう?

 よく出ますね(^^

>  またtek0展開に際しては、EBXとEDI以外のレジスタは保存されます。
>仕様を確認しました。これを利用して、上記の手法をさらに精練する事
>もできます。

 あれ、popad を見て全額保証だと思っていたんですが、……スタック操作
ですか。何が入ってくるのかも気になります。

>    /* この4命令(6バイト)を最初の方でやっておく */
>    AL = 0xc7;
>    PUSH(EAX); /* 0x00c7を積む */
>    PUSH(ECX); /* 0を積む */
>    ESI = ESP;

 espの初期化と合わせてpush eaxまでヘッダに無駄なく入るのがミソですね。

>    DB(0xff, 0x1e); /* CALLF [DS:ESI] */
>  これなら、2回の合計は10バイトです。3回でも12バイトです。ESIが
>使えなくなりますが。

 あの入門御三家はレジスタが余りまくっていますから、その心配はありません。

>> さらに縮みそうですので、また報告します。
>  はい、楽しみにしています。せっかくですから究極に到達してほしい
>と思っています。

cnTdwn3 209
colorT4 190
helloT1 149
……というとこまで来ました。が、これを読んだからにはまた縮みます ^^)/

~~~~~~~~
 質問です。
特別コマンドは、初期化コマンドに偽装するような形で書きますよね。
では、特別コマンドだけ使うときは、特別終了コマンドと通常終了
コマンドのどちらが正しいのでしょうか?
 つまりこうです。
pioneerを読んだところ、特別コマンドの終了は -1 の特別終了でも 0 の
通常終了でも良さそうでした。が、0 を使ったらライブラリ初期化ができて
いないためかエラーを起こしました(pioneer以外で止まったから。コマンド
終了コマンドを使うためにも初期化が必要?)。では、初期化を済ませたら、
どうなるのでしょうか? (意味はないかも)

 特別コマンド終了コマンドは言い逃れっぽい感じがします。偽装を含め
美しくはありません。

------------------------------------------------------------
I.Tak. <msy !Atmark! catvmics.ne.jp>
http://home1.catvmics.ne.jp/~msy/takhome.htm