En COM-fil är en enkel typ av exekverbar fil som används i MS-DOS och dess kloner, samt även 8-bitars CP/M. Namnet på filformatet kommer från filändelsen .com (från engelskans command, kommando), som ej bör förväxlas med toppdomänen .com (från commercial, kommersiell).

Formatet stöds fortfarande[när?] på de flesta moderna Windows-baserade operativsystem, men körs då i en MS-DOS-emulator som har tagits bort i 64-bitarsvarianterna av Windows. Många hjälpprogram som till exempel MS-DOS-versionen av more använde formatet, liksom tidiga småapplikationer som IBM:s spel Alley Cat.

Format redigera

COM-formatet är kanske det enklaste exekverbara formatet av alla: det innehåller inget metadata, bara programinstruktioner och data, och läses alltid in i adress 0x0100 i något segment för att sedan köras. Ingen relokation är nödvändig.

Enkelheten har dock sitt pris: den maximala storleken för en COM-fil är 65,280 (0xFF00) bytes och programmet måste lagra alla data och instruktioner i ett segment. Detta var inte något problem i tidiga 8-bitars CP/M-maskiner, men är anledningen till att formatet slutat användas i högre grad efter att 16-bitars och 32-bitarsprocessorer introducerats, med sina större segmenterade arbetsminnen.

I Intel 8080-processorn kunde bara 65,536 bytes adresseras. I CP/M var den första sidan av detta minnesintervall, från 0x0000 till 0x00FF, reserverat för systemet, och alla program måste följaktligen läsas in i adressen 0x0100 och högre. COM-filer lämpar sig för denna modell perfekt. Notera att det inte fanns någon möjlighet att köra fler än ett program samtidigt i CP/M, bara COM-filen som lästs in i adress 0x0100.

Även om filformatet är detsamma i CP/M och MS-DOS betyder inte detta att CP/M-program kan köras direkt i MS-DOS eller tvärtom. COM-filer i MS-DOS innehåller x86-instruktioner, medan COM-filer i CP/M innehåller 8080, 8085 eller Z80-instruktioner. Dessutom är COM-filer i MS-DOS beroende av operativtjänster som finns bara i MS-DOS-miljön. Det är dock möjligt att konstruera COM-filer som både kan köras i CP/M och MS-DOS.

Filer kan ha filändelsen .COM men inte vara i det enkla format som beskrivits. Detta påskins genom ett magiskt nummer i början av filen. Till exempel är COMMAND.COM i DR-DOS 6 egentligen i DOS Executable-format, vilket kan förstås av de första två bytes 0x4D 0x5A (MZ i ASCII), Mark Zbikowski initialer.