COMファイル

COMファイル (コムファイル、COM file) は、実行可能ファイル形式の一つ。語源はcommand（命令）。拡張子は「.COM」（本来は大文字）だが、トップレベルドメインの.com (commercial) とは無関係。

実行時のメモリイメージがそのままファイルとなっている、最も単純な実行可能ファイル形式である。

MS-DOSのCOMファイルはコンピュータウイルスCascadeに感染する。

歴史 
拡張子.COMの実行ファイルは古くからあったが、現在の形式のものはCP/Mで使われ、CP/Mを元にしたMS-DOSにも採用された。ただし、CPU（CP/Mは8080系、MS-DOSは8086系）や割り込みの仕様の違いのため、互換性は乏しい。CP/MとMS-DOSの両方で実行できるファイルも作れるが、両方のコードを収録するためファイルサイズが大きくなる。また、8086系CPUを対象にしたCP/M-86では拡張子は.COMではなく.CMDである（Windows NT系の.CMDファイルとは無関係）。

MS-DOSには、ほかに2つの実行可能ファイル形式、EXEファイルとBATファイルがあった。EXEとBATはMicrosoft Windowsにも採用されたが、COMファイルは廃止された（仮想DOSマシン上では実行可能）。

内容 
実行時のメモリイメージがそのままファイルとなっており、ファイルの内容を0100番地からメモリに展開（ロード）し先頭にジャンプすれば、直ちに実行が始まる。ファイルヘッダなどいっさいのメタデータを含まず、これは、EXEヘッダからファイルが始まるEXEファイルとの大きな違いである。ファイルの内容全部をロードしてから実行する点も、全部を一度にロードするとは限らないEXEファイルとの違いである。

セグメントがコードもデータも含め1つであり、これは複数のセグメントを持つことができるEXEファイルとは異なる。このため、ファイルサイズは最大で65279バイト（8086系CPUのセグメントサイズである64キロバイトからメモリ展開時のオフセットの256バイトとスタックの1バイトを引いた値）である。ファイルサイズがこれを超える場合は、メモリの空きがいくらあっても「プログラムが大きすぎてメモリに入りません」(Program too big to fit in memory) または「(ファイル名) は実行できません」(Cannot execute (ファイル名)) とエラー表示され実行されない（この制限はロード時であり、実行中にセグメントを変更したり64キロバイトを超えるプログラムやデータを読み込むことは可能である）。8080系CPUのCP/Mの場合も同様に0100番地にロードされるが、メモリの上位にCP/Mのシステムが常駐しているため、ロードできるファイルサイズの上限はさらに小さくなる。

また、メタデータがないため極小の実行可能ファイルを作ることができる。これらの理由で、一般に、EXEファイルより小さいことが多い。最小は1バイトで、0バイトではエラーになる。

Windows 9x系にある COMMAND.COM は、拡張子は.COMであるが内容はEXEファイルであり、ファイルサイズも64キロバイトを超えている。

実行優先順位 
MS-DOSの実行可能ファイル形式のうち、デフォルトでは最も実行優先順位が高い。したがって、MS-DOSバージョン4以降で拡張子を省略してコマンド「notepad」をコマンドラインに入力した時、他の実行可能形式「notepad.exe」「notepad.bat」が存在する場合でも、「notepad.com」があればこれが実行される。バージョン3まででは拡張子を指定しても、「notepad.com」があればこれが実行される。

COMファイルを作成するには、コンパイラなどでEXEファイルとして作成し、（MS-DOS外部コマンド）やEXE2COM（フリーソフト）のようなプログラムで変換することができる。アブソリュートアセンブラで直接作成することもできる。

オブジェクトファイルフォーマット
MS-DOS・Windows 3.x・9x系