Eseguibile COM
COM | |
---|---|
Vari file COM in un computer con PC DOS 1.0 | |
Estensione | .COM
|
Tipo MIME | application/x-dosexec
|
Tipo | File eseguibile |
Esteso a | Eseguibile DOS MZ |
Un file eseguibile COM (COre iMage[1]) di MS-DOS è un formato di file eseguibile per codice a 16 bit, pensato per programmi molto semplici: il file è l'immagine esatta del programma in RAM, e la prima istruzione da eseguire è situata obbligatoriamente alla posizione 256 del file, che non può essere più lungo di 65536 bytes (64 kilobytes). Non ci sono segmenti né rilocazioni da fare. Ormai è caduto in disuso: viene supportato dalle moderne versioni di Windows solo per compatibilità.
Originariamente, il termine .COM era usato nei sistemi operativi dei minicomputer e mainframe DEC degli anni '70 per indicare un file di testo che conteneva dei comandi eseguibili. Il CP/M a 8 bit e l'MS-DOS, poi, ridefinirono il termine, intendendo con esso dei file binari eseguibili. Le tre lettere di COM sono da distinguersi dal dominio internet di primo livello .com (che proviene da commercial). Storicamente, questa somiglianza è stata usata a scopo di truffa da alcuni malware.
Il formato di file MS-DOS
[modifica | modifica wikitesto]Questo formato fu il primo formato eseguibile implementato sia nel CP/M che in MS-DOS: non contiene né header né metadati, ma solo codice e dati. Questa semplicità ha un suo prezzo: il programma può essere lungo soltanto 65.280 (0xFF00) bytes, cioè 256 byte in meno di 64 KiB, e tutto deve essere contenuto in un unico segmento.
Poiché il file non contiene informazioni di rilocazione, il programma contenuto deve essere caricato ed eseguito sempre all'indirizzo prefissato di 0x0100 (da cui la limitazione sulla lunghezza). Questo non era un problema sulle macchine a 8 bit: ad esempio la CPU Intel 8080 poteva gestire solo 64 KiB di RAM, e il CP/M riservava i primi 256 bytes della memoria di sistema per sé, mentre i programmi potevano cominciare solo dall'indirizzo 0x0100. Il formato .COM si adattava perfettamente a questa architettura.
Le macchine a 16 e 32 bit invece potevano gestire molta più memoria ed erano anche multitask: poiché il programma si poteva eseguire solo all'indirizzo prefissato, era possibile eseguire uno e un solo programma .COM alla volta. E per giunta, essendo lungo al massimo 64KiB, lasciava molta RAM inutilizzata. Per questi motivi il formato .COM cadde rapidamente in disuso man mano che queste architetture si affermavano.
Anche se il formato .COM è identico fra CP/M ed MS-DOS, questo non significa che un file .COM sia eseguibile indifferentemente su entrambe le piattaforme: le chiamate al sistema operativo sono completamente diverse, e inoltre le macchine CP/M sono costruite intorno a processori 8080, 8085 o Z80, incompatibili con le architetture x86 su cui girava l'MS-DOS. È possibile, però, scrivere file .COM 'duali' contenenti due versioni diverse dello stesso codice, una per CP/M e una per MS-DOS; un simile file .COM è eseguibile indifferentemente su entrambe le piattaforme.
Note
[modifica | modifica wikitesto]- ^ Turbo Assembler user's guide, pag. 229.