[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