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) または「(ファイル名)…