COM (soubor)

COM je v informatice typ spustitelného souboru, který je používán v několika operačních systémech. Původní použití zkratky bylo pro soubor typu Command, což je textový soubor obsahující příkazy, které budou po spuštění předány operačnímu systému (podobně, jako je v DOSu zpracován dávkový soubor). Spustitelné soubory ve formátu .COM nemusí mít pro spuštění vždy nutně příponu souboru .COM. V systému CP/M a počátečních verzích systému MS-DOS tomu tak ale muselo být.

Přípona souboru .COM nijak nesouvisí s internetovou doménou nejvyšší úrovně .com (zkratka commercial, tj. komerční). Nicméně tato podobnost v názvu byla v minulosti zneužita počítačovými viry.

Binární formát v DOSu a CP/M

Formát souboru .COM je binární formát původně používaný v systémech CP/M a DOS. Je velmi jednoduchý, nemá hlavičku (s výjimkou souborů v CP/M 3) ani metadata, obsahuje pouze kód a data. Tato jednoduchost je ovšem za cenu, že binárka může mít maximální velikost 64 KiB a veškerý kód i data jsou uložena v jednom segmentu.

Vzhledem k tomu, že chybí informace o relokaci, soubor je načten do operační paměti na předem nastavenou adresu (offset 0100h bezprostředně po PSP), odkud bude i spuštěn. Toto nebyl problém na prvních 8bitových počítačích, ovšem tento fakt je hlavním důvodem, proč se formát .COM přestal používat brzy po zavedení 16bitových a 32bitových procesorů.

V architektuře Intel 8080 lze adresovat pouze 65536 bajtů paměti (rozsah adres 0000h až FFFFh). V CP/M bylo prvních 256 bajtů paměti (od 0000h do 00FFh) vyhrazených pro systémové použití a každý uživatelský program musel být nahrán přesně od adresy 0100h, odkud byl následně spuštěn. Soubory .COM se na tento model hodí perfektně. Všimněme si, že před zavedením MP/M a Concurrent CP/M nebylo možné spustit více než jeden program nebo příkaz ve stejném čase. Všechny se totiž musely načíst na adresu 0100h.

Přestože v operačních systémech DOS i CP/M je formát souboru .COM stejný, soubory nejsou kompatibilní. V DOSu jsou použity strojové instrukce x86 (i systémová volání DOSu), zatímco v CP/M jsou použity strojové instrukce Intel 8080 a systémová volání CP/M (programy vyhrazené pro určité konkrétní systémy mohou navíc obsahovat další instrukce Intel 8085 nebo Z80).

Je ovšem možné přeložit soubor .COM, který poběží v obou operačních systémech. Nazývá se fat binary („tlustá binárka“). Nejedná se ale o kompatibilitu na úrovni strojových instrukcí. V podstatě se jedná o dva různé programy se stejnou funkčností v jednom souboru, kde každá část používá strojové instrukce své hardwarové platformy. Operační systém si ze souboru .COM vybere část určenou právě pro něj.

V CP/M 3 může .COM soubor obsahovat i 256bajtovou hlavičku, což signalizováno hodnotou prvního bajtu (hodnota prvního bajtu nastavena na C9h). Hodnota C9h odpovídá 8080 instrukci RET (návrat z podprogramu), takže v případě, že dojde ke spuštění na starší verzi CP/M, která nepodporuje toto rozšíření, dojde k okamžitému ukončení programu. Jelikož instrukční sady 8085 a Z80 jsou nadmnožinami 8080, toto opatření funguje na všech třech systémech CP/M. Instrukce C9h je ale neplatný operační kód na 8088/8086 a způsobí výjimku. Z důvodu vyhnutí se kolizi, zavaděče některých verzí DOSu zamítají programy začínající C9h. Operační kód C9h pro návrat je až v 80188/80186.

Velké programy

V systémech MS-DOS a DOS kompatibilní, není zavaděčem nebo běhovým prostředím stanovena žádná správa paměti pro .COM soubory. Veškerá paměť je .COM souboru jednoduše přístupná. Po spuštění je do operační paměti také znovunačten shell COMMAND.COM. To umožňuje, že soubor .COM může být velmi jednoduchý, ale i libovolně složitý s vlastním řízením paměti.

Příklad složitého .COM programu je COMMAND.COM, shell MS-DOSu, který poskytuje zavaděč pro načtení jiných .COM nebo .EXE programů. Programy nebo datové segmenty větší než dostupná paměť mohou být dynamicky načítány. Výhoda .COM programů oproti .EXE je obvykle menší velikost binárky a snazší programování v jazyce symbolických adres (nesprávně assembler). Jakmile byly ale k dispozici kompilátory a linkery s dostatečným výkonem, přestalo být výhodné používání formátu .COM pro rozsáhlé programy.

Podpora na platformách

Formát .COM je stále spustitelný na mnoha moderních platformách Windows. Spuštěn je ale v subsystému emulace MS-DOS. Soubory .COM mohou být také spouštěny v emulátorech DOSu, jakým je například DOSBox.

Reference

V tomto článku byly použity překlady textů z článků COM-Datei na německé Wikipedii a COM_file na anglické Wikipedii.