━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ いざというときに役立つMS−DOS 執筆:速星 千里 第85号(2007.08.02) 最小のプログラム ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ <目次> ■ はじめに ■ 最小のプログラム ● C言語で書いてみる ● DEBUGコマンドを使ってみる ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ はじめに ------------------------------------------------------------------------ 皆さん、お久しぶりです。速星です。 実に半年ぶりの発行となってしまいました。申し訳ありません。 ネタはいくつかあるのですが、暇がとれず、ずるずると執筆が先延ばしになって しまっていました。 第83号でも記しましたように、気まぐれな不定期発行にはなってしまっていますが、 休刊や廃刊にするつもりはありません。どうか気長にお付き合い願います。 (編集後記に続く) さて、今回のテーマは「最小のプログラム」です。久しぶりの発行ということで、 リハビリも兼ねて、軽めの話題をお送りします。 軽めの話題とはいえ、DOSの威力が良く分かるテーマだと思いますので、ぜひ、 実際に手を動かして試しながら読んでみて下さい。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ 最小のプログラム ------------------------------------------------------------------------ 読者の皆さんの中には、C言語やJavaなどといったプログラミング言語を使って プログラムを作ってみたことがある、という方も多くいらっしゃるでしょう。 プログラムを書いてみると、気になるのが実行ファイルのサイズです。 大した作業をしないプログラム、例えば「Hello, World!」を表示するだけのプロ グラムでも、コンパイルして実行ファイルにしてみたらファイルサイズが何キロ バイトもあって驚いた、という経験をお持ちの方もあるかもしれません。 では、実行ファイルのサイズが最小になるプログラムは、どんなプログラムでしょ うか? まず、実行内容からいえば「何もしないプログラム」が最小のはずですね。これは すぐに想像がつくと思います。 では、どんな言語でどんな書き方をした場合に、実行ファイルが最も小さくなる でしょうか? ------------------------------------------------------------------------ ● C言語で書いてみる まずは、プログラムの内容の確認も兼ねて、C言語で書いてみましょう。 > void main(void){ > } はい、これだけです。わずか2行。簡単ですね。 けれども、コンパイルしてみるとあら不思議、実行ファイルは何十キロバイトも のサイズになってしまいます。 例えば、私の手元にある「Visual Studio 2005」でコンパイルしてみたところ、 ファイルサイズは44キロバイトになりました。 何もしないのに、こんなに大きなサイズになってしまうのはなぜでしょうか? それは、プログラムを実行するための準備作業をする部分、あるいは実行後の 後片付けをする部分などが自動的に付け足されるためです。 何もしないプログラムなので準備も後片付けもいらないはずなのですが、機械的 に付け足されてしまいます。 ------------------------------------------------------------------------ ● DEBUGコマンドを使ってみる では、先程と同じことをアセンブラ(アセンブリ言語)で書いてみましょう。 アセンブラには、幅広いバージョンのWindowsに標準装備されている、DEBUGコマ ンド(※)を使うことにします。 コマンドプロンプト上で、下に示した見本と同じようになるように入力してみて ください。 > E:\>debug > -a 100 > 34C2:0100 int 20 > 34C2:0102 > -n mini.com > -r bx > CX 0000 > :0000 > -r cx > CX 0000 > :0002 > -w > 00002 バイト書き込み中. > -q > > E:\> はい、お疲れ様でした。 C言語で書く場合よりも、ちょっと面倒だったかと思います。 それでは、カレントフォルダに実行ファイル「mini.com」ができていますので、 ファイルサイズを見てみましょう。 > E:\>dir > ドライブ E のボリューム ラベルがありません。 > ボリューム シリアル番号は FCB0-7832 です > > E:\ のディレクトリ > > 2007/07/31 17:47