[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]
[OSASK 2791] Re: Smaller color
- Subject: [OSASK 2791] Re: Smaller color
- From: Hidemi KAWAI <kawai !Atmark! imasy.org>
- Date: Wed, 26 Dec 2001 04:14:21 -0000
こんにちは、川合です。
I.Tak. さんは 2001/12/26 00:16:40 の「[OSASK 2789] Re: Smaller c
olor」で書きました:
> 来ましたよ〜。おそらくまた(^^; 限界です。
>helloT1 146
>colorT4 184
>cnTdwn3 200
来ましたねえ。
今はSeldon, Adelaidの開発中なのであまり詳しくは確認できていま
せんが、colorT4はよく読んでみました。
それでいまさらになって気がついたことをいくつか。
> add esp, byte 4*6
これって、ESP = ESI;にすれば、1バイト減らせるんじゃないでしょう
か?・・・というか、別にこの命令自体を省略してしまってもいいんじ
ゃないかと。無くてもスタックを24バイト浪費するだけなので・・・。
いかがでしょう?
EBX = 0;の代わりに、XCHG(EAX, EBX);を使うのはさすがだと思いま
した。もはや僕よりもXCHGの使い方がうまくなりましたね(笑)。x座
標をXCHGで交換するのもさすがです。
・・・いやまてよ、
> xchg [ebx +LIB_PutString.x_pos], ch
の代わりに、
xor dword [ebx +LIB_PutString.x_pos], byte 10
の方がいいんじゃないでしょうか?確かにここでは1バイトの損ですが
CXへの代入をCLの代入に変更できてそこで2バイト得しますし、さらに
CL--;をECX--;に変更できるのでここで1バイト得して、トータルでは2
バイトの得です。
いやここまでやるならループ条件をnsからnzに変更して、LOOP命令を
使いましょう。これでさらに1バイト減らせます。
> push dword data_size
これは実は、ちょっと縮められます。というのは、data_sizeがたま
たま、0x0100になっているからです。そんなわけで、
BH = 0x01;
PUSH(EBX);
に変更することをお勧めします。2バイト減らせます。・・・この手法
は意外に応用が利くかもしれません。データーイメージの最後に00を書
き連ねておいて、data_sizeを256バイトアラインしておけば、いつでも
使えます。あとはtek0がこの余計な0をパックするのにどれだけ要する
か、にかかってきますが。
ついでに、これはちょっと得なのか損なのかはっきりとは分からない
のですが、struct bssのところで、
>.winwork: resb 128
>.titlework: resb 64+ titlelength*8
>.textwork: resb 64+ textlength*8
の部分を
.winwork: resb 128 + 128
.titlework: resb 64+ titlelength*8 + 144
.textwork: resb 64+ 20*8*8
にしたらtek0でパックしたときのサイズに影響は出るでしょうか?
ああ、それにしてもこんなに小さくなるとは・・・。僕の変更をすべ
てそのまま採用すればとりあえず176バイトにはなるはずで、そうなる
とかつてのHELLO0.BINとたったの4バイトしか違わないわけです。そのh
elloはもっと縮んでいるんですが(笑)。
今のサイズでさえ、colorT4.binをダンプしてみると、本当に小さい
と思います。芸術ですよ、ここまで来ると(笑)。
>ついにパリティまで動員しました。正式ASKAだとどう書くのか…… :->
正式ASAKでは、
if (PF == 0) goto ...
などと書きます。簡単ですね。
それでは。
--
川合 秀実(KAWAI Hidemi)
川合堂社長 / OSASK計画総指揮 / カーネル開発班
E-mail:kawai !Atmark! imasy.org
Homepage http://www.imasy.org/~kawai/