4: 2004-05-06 (木) 04:31:20 |
現: 2024-01-08 (月) 12:58:55 k-tan |
| -512バイトに収めるということになると、どうしてもアセンブラが有利になってしまうので(いやもちろん1KBでもアセンブラが有利ですが)、C言語ファンの人がもっと有利に戦えるように、ここにテクニックをまとめたいと思います。 | | -512バイトに収めるということになると、どうしてもアセンブラが有利になってしまうので(いやもちろん1KBでもアセンブラが有利ですが)、C言語ファンの人がもっと有利に戦えるように、ここにテクニックをまとめたいと思います。 |
| -まずは最新版<guigui00.h>を入手しましょう。これはosa_dir3にバンドル予定されているものですが、たぶん5/12にosa_dir3が間に合わないので、とりあえず以下のURLからダウンロードしてください。osa_dir2のz_tools/guigui00/guigui00.hを上書きすればOKです。 | | -まずは最新版<guigui00.h>を入手しましょう。これはosa_dir3にバンドル予定されているものですが、たぶん5/12にosa_dir3が間に合わないので、とりあえず以下のURLからダウンロードしてください。osa_dir2のz_tools/guigui00/guigui00.hを上書きすればOKです。 |
- | --http://k.hideyosi.com/test062.lzh (19.6KB) | + | --http://k.hideyosi.com/test062.lzh (26.3KB) |
| -さて結局のところ、アセンブラがC言語に対してやたらと有利なのは、lib_execcmdをじゃんじゃん使うからです(と僕は思う)。まあそりゃあもちろん出力されるコードの質も違いますが。しかしとにかくCでもlib_execcmdを活用すれば、その差は縮むのです。ということでここではlib_execcmdの活用を中心に説明します。 | | -さて結局のところ、アセンブラがC言語に対してやたらと有利なのは、lib_execcmdをじゃんじゃん使うからです(と僕は思う)。まあそりゃあもちろん出力されるコードの質も違いますが。しかしとにかくCでもlib_execcmdを活用すれば、その差は縮むのです。ということでここではlib_execcmdの活用を中心に説明します。 |
| | | |
| #define _ (void *) | | #define _ (void *) |
| #define __(a, b, c, d) (void *) (a | b << 8 | c << 16 | d << 24) | | #define __(a, b, c, d) (void *) (a | b << 8 | c << 16 | d << 24) |
| + | |
| static void *cmd0[] = { | | static void *cmd0[] = { |
| _ LIB_FN_INIT, _ &lib_work, | | _ LIB_FN_INIT, _ &lib_work, |
| | | |
| * こめんと欄 | | * こめんと欄 |
| + | -guigui00.hをインラインアセンブラ化するってのはどうかな……ってこりゃ最後の数バイトか -- [[I.Tak.]] SIZE(10){2004-05-06 (木) 08:24:17} |
| + | |
| #comment | | #comment |