PDA

View Full Version : [Win] compilare come .COM anziché .EXE


71104
16-04-2005, 13:11
come da titolo, qualcuno conosce la maniera di creare eseguibili .com anziché .exe? è necessario un assemblatore? se sì, quale mi consigliate? grazie. :)

Ziosilvio
16-04-2005, 13:26
A me sembrava di ricordare che .com e .exe sono praticamente la stessa cosa, cambia solo la priorità nel senso che, se ci sono nome.com e nome.exe, allora dando "nome" al prompt viene eseguito nome.com e non nome.exe...
... se davvero è così, basterebbe rinominare il .exe fornito dal compilatore...

DanieleC88
16-04-2005, 14:30
I file COM non sono altro che codice assembly compilato per essere un semplice file oggetto binario (detta così sembra strana, ma è un "flat executable" con origine 0x100).

Basta un qualsiasi assembler (ti consiglio uno tra NASM - http://nasm.sourceforge.net/ - e YASM - http://www.tortall.net/projects/yasm/).
Prova a scrivere un semplice file del tipo:

ORG 100H

main:
faiquellochedevifare
RET

71104
16-04-2005, 16:02
A me sembrava di ricordare che .com e .exe sono praticamente la stessa cosa, cambia solo la priorità nel senso che, se ci sono nome.com e nome.exe, allora dando "nome" al prompt viene eseguito nome.com e non nome.exe...
... se davvero è così, basterebbe rinominare il .exe fornito dal compilatore...
ovviamente la differenza non è solo l'estensione, vedi la risposta di Daniele ;)
anche perché sarebbe assurdo creare un'estensione apposta per due formati che sono uguali :p
in realtà sono due formati completamente diversi (vedere www.wotsit.org): infatti in Windows gli EXE hanno formato PE, mentre i COM... non hanno formato! sono puro assembly :)
infatti credo che vengano eseguiti solo in modalità virtuale 86 perché non hanno nemmeno il segmento dati
grazie 1000 daniele, allora provo questo NASM; è free?

71104
16-04-2005, 16:03
grazie 1000 daniele, allora provo questo NASM; è free?
be', :doh: che sciocco che sono, avete mai visto qualcosa a pagamento su sourceforge? :p

DanieleC88
17-04-2005, 09:02
be', :doh: che sciocco che sono, avete mai visto qualcosa a pagamento su sourceforge? :p
:D
Be', ti sei risposto da solo! ;)
Ad ogni modo, NASM è ottimo, ma ti consiglio di non perdere di vista YASM, visto che è basato su NASM ed è stato scritto per diventare un assembler "modulare", con supporto per diverse sintassi e un gran numero di formati oggetto. Per ora non è molto diverso da NASM, ma in futuro potrebbe diventare interessante.

Ziosilvio
17-04-2005, 12:31
ovviamente la differenza non è solo l'estensione, vedi la risposta di Daniele ;)
Mi pareva... grazie!
anche perché sarebbe assurdo creare un'estensione apposta per due formati che sono uguali :p
Da Microsoft, mi aspetto questo e altro! :D
in realtà sono due formati completamente diversi (vedere www.wotsit.org):
Visto.
Bel sito, e mi permetto di quotare e tradurre un paio di pezzi da due delle guide:
Dal file di documentazione com.txt su wotsit.org
I file COM sono eseguibili binari grezzi (raw) e sono un rimasuglio (leftover) delle vecchie macchine CP/M con 64K RAM. Un programma COM può avere solo una grandezza inferiore a un segmento (64K), inclusi il codice e i dati statici.
Dal file di documentazione mzexe.txt su wotsit.org
I vecchi file EXE sono i file EXE eseguiti direttamente da MS-DOS. Erano un grande miglioramento dei vecchifile COM da 64K, dal momento che i file EXE possono occupare più segmenti. Un file EXE contiene tre parti distinte, l'header, la tavola rdi riallocazione (relocation table) e il codice binario.