実行ファイルの EXE 形式と COM 形式

MS-DOS の実行ファイルには、EXE 形式と COM 形式の 2 種類があり、アセンブラプログラムはどちらの形式の実行ファイルでも作成することができます。

同じプログラムならば、COM 形式にした方が EXE 形式にするよりもファイルサイズが小さくなりますが、COM 形式にできるプログラムは 64K バイト以下のものに限られています。アセンブラで作成するプログラムは小さなものが多いので、COM 形式がよく使用されます。

COM 形式プログラムの制限

COM 形式プログラムの総サイズは、64K バイト以下でなければなりません。その実際の理由は、COM 形式プログラムにはリロケート情報がなく、プログラム中のセグメントアドレスの参照を行えないという点にあります。

COM 形式プログラムでも、ソースコードの構成上は複数のセグメントを定義することが可能ですが、そのセグメントのアドレスをオペランドに使用することはできません。このため現実にはセグメントレジスタの値をプログラム内で動かすことはできず、64K バイトより大きなプログラムには向かないわけです。

COM 形式プログラム作成時の注意点

COM 形式プログラムのソースコードは、EXE 形式プログラムのソースコードとは少々違った作り方が必要です。次に COM 形式の場合に EXE 形式と違う点を示します。

@ プログラムの最初の 100h バイト(256 バイト)は使用してはなりません。ここには MS-DOS が PSP というデータを入れるためです。

A プログラムのコードはプログラム先頭に対してオフセット 100h の地点から始めなければなりません。MS-DOS はプログラムの実行を必ずこの地点から始めるためです。END 文でプログラムの実行開始ラベルを指定する必要はありません。

B セグメントレジスタの初期化は必要ありません。プログラムの実行開始時には、すべてのセグメントレジスタはプログラムの先頭にセットされています。



サンプルプログラムの解説」では、EXE 形式と COM 形式のプログラム例を 1 つずつ取り上げて解説しています。

[目次]