コンテンツにスキップ

「COMファイル」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
m dab AWB
m カテゴリ移動対応
 
(15人の利用者による、間の17版が非表示)
18行目: 18行目:
実行時の[[主記憶装置|メモリ]]イメージがそのままファイルとなっている、最も単純な実行可能ファイル形式である。
実行時の[[主記憶装置|メモリ]]イメージがそのままファイルとなっている、最も単純な実行可能ファイル形式である。


MS-DOSのCOMファイルは[[コンピュータウイルス]][[Cascade (コンピュータウイルス)|Cascade]]に感染する。
==歴史==

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


MS-DOSには、ほかに2つの実行可能ファイル形式、[[EXEフォーマット|EXEファイル]]と[[バッチファイル|BATファイル]]があった。EXEとBATは[[Microsoft Windows]]にも採用されたが、COMファイルは廃止された([[仮想DOSマシン]]上では実行可能)。
MS-DOSには、ほかに2つの実行可能ファイル形式、[[EXEフォーマット|EXEファイル]]と[[バッチファイル|BATファイル]]があった。EXEとBATは[[Microsoft Windows]]にも採用されたが、COMファイルは廃止された([[仮想DOSマシン]]上では実行可能)。


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


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


また、メタデータがないため極小の実行可能ファイルを作ることができる。これらの理由で、一般に、EXEファイルより小さいことが多い。最小は1バイトで、0バイトではエラーになる。
==MS-DOSでの使用==
MS-DOSの実行可能ファイル形式のうち、最も実行優先順位が高い。つまり、拡張子を省略して[[命令 (コンピュータ)|コマンド]]を[[コマンドライン]]入力した拡張子以外が同じファイル名の実行可能ファイルあった場合、「COM「EXE」「BAT」の順に、ファイルがあるかどうかチェックされる(これらの前に内部コマドのチェックがある


[[Windows 9x系]]にある [[COMMAND.COM]] は、拡張子は.COMであるが内容はEXEファイルであり、ファイルサイズも64キロバイトを超えている。
COMファイルを作成するには、[[コンパイラ]]などでEXEファイルとして作成した後、EXE2COMのような変換プログラムを使うことが多い。

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

COMファイルを作成するには、[[コンパイラ]]などでEXEファイルとして作成し、{{仮リンク|EXE2BIN|en|List of MS-DOS commands#exe2bin}}(MS-DOS外部コマンド)やEXE2COM(フリーソフト)のようなプログラムで変換することができる。アブソリュート[[アセンブリ言語|アセンブラ]]で直接作成することもできる。

{{実行可能ファイル}}


{{DEFAULTSORT:こむふあいる}}
{{DEFAULTSORT:こむふあいる}}
[[Category:オブジェクトファイルフォーマット]]
[[Category:MS-DOS・Windows3.x・9x系]]


[[Category:オブジェクトファイルフォーマット]]
[[de:COM-Datei]]
[[Category:MS-DOS・Windows 3.x・9x系]]
[[en:COM file]]
[[es:Archivo COM]]
[[fr:.com (MS-DOS)]]
[[he:קובץ COM]]
[[it:Eseguibile COM]]
[[ko:COM 파일]]
[[la:COM]]
[[pt:COM (formato)]]
[[ru:.COM]]
[[sl:COM]]
[[sv:COM (filformat)]]

2023年6月15日 (木) 13:59時点における最新版

COM (command)
拡張子.COM
MIMEタイプapplication/x-dosexec
種別実行可能ファイル

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ファイルとして作成し、EXE2BIN英語版(MS-DOS外部コマンド)やEXE2COM(フリーソフト)のようなプログラムで変換することができる。アブソリュートアセンブラで直接作成することもできる。