COM (soubor)

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

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ě . +morecom (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. +more 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 . +moreCOM 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. +more 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í. +more 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. +more 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). +more 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. +more 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. +moreCOM, 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. +more 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.

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top