aspose.info
CS

Formát souboru příkazů COM - DOS

Aktualizováno

Co je soubor COM?

Soubory COM se jednoduše používají k provádění sady příkazů nebo instrukcí. Soubor COM se skládá ze spustitelného programu, který lze spustit ze systému Windows nebo MS-DOS. Stejně jako soubor EXE je soubor COM také uložen v binárním formátu, ale liší se od souboru EXE, protože nemá záhlaví ani metadata a také má maximální velikost přibližně 64 KB. Při prvním spuštění souboru COM na 32bitovém systému se zobrazí výzva k instalaci součásti NT Virtual DOS Machine (NTVDM). Soubor COM lze spustit v 64bitové verzi systému Microsoft Windows s virtuálním počítačem, který podporuje prostředí MS-DOS.

Formát souboru COM

Formát souboru COM je binární spustitelný formát používaný v Microsoft Windows nebo MS-DOS. Jeho struktura se skládá pouze ze sady instrukcí; nemá žádné záhlaví a neobsahuje žádná standardní metadata. Ukládá všechna svá data a kód pouze do jednoho segmentu a jeho binární soubor má velikost maximálně 64 kB. Tento formát souboru se při pokusu o opětovné spuštění nepřemístí. Operační systém jej tedy načte na předem nastavenou adresu. Kromě toho je možné vytvořit soubor COM pro spuštění pod oběma operačními systémy ve formě fat binary. Na úrovni instrukcí neexistuje žádná skutečná kompatibilita. Instrukce ve vstupním bodě jsou vybrány tak, aby byly stejné ve funkčnosti, ale v obou operačních systémech se lišily, a aby program běžel, skočil do části používaného operačního systému. Jde v podstatě o dva různé programy se stejným postupem v jednom souboru, kterému předchází kód, který vybere ten, který se má použít.

Příklad souboru COM

Při provádění souboru COM jsou instrukce čteny od prvního bajtu a jsou sledovány postupně, dokud nejsou nalezeny poslední instrukce. Zde je příklad kódu ASM:

[BITS 16]		;Set code generation to 16 bit mode
[ORG 0x0100]		;Set code start address to 0100h


[SEGMENT .text]		;Main code segment
    mov ah, 9 ; DOS print string function
    mov dx, hello
    int 21h
    ;Exit to DOS
    mov ah, 4ch
    int 21h
[SEGMENT .data]		;Initialised data segment
hello:   db   'Hello, .COM programmer!',13,10,'$'

Reference

Viz také