Wie erstellt man eine .com Datei?

6 Antworten

Du brauchst einen alten Linker, der dieses Format noch unterstützt. Das erkennst Du daran, dass er eine Option wie --target-type=com|exe|lib|dll anbietet.

Gewöhnlich ist der Linker im Compilerpaket mit drin. Suche also einfach eine antike Version Deines Lieblingscompilers. Im vergangenen Jahrtausend sollten sie noch alle das .com-Format unterstützt haben.

Aber "echte Programmierer" schreiben stattdessen einfach selbst ein paar Maschinenbefehle in eine datei.com:

  • Befehlssatz: x86 real mode
  • erster Befehl wird auf Adresse 0x0100 liegen
  • max. 64kB inklusive Stack und Heap
ElamoMichi 
Fragesteller
 11.02.2019, 12:26

Alternativ wär auch exe Datei OK.

Müsste nur wissen wie ich alternativ eine exe erstellen kann, die ich unter DOS ausführen kann.

1
ralphdieter  11.02.2019, 13:13
@ElamoMichi

Das ist jetzt aber eine andere Frage. Aber die Antwort lautet gleich: Suche ein altes Compilerpaket, das noch 16bit unterstützt. Borland C++ z.B. ist frei erhältlich und unterstützt die Zielplattform MS-DOS noch bis einschließlich Version 5.0.2. Er selbst läuft sicher auf Windows NT, möglicherweise auch auf neueren Windows-Versionen.

2

Du erstellst ein Programm mit ausführbaren Befehlen und die wird dann in eine com-Datei umgewandelt passend zu deinem Betriebssystem. Programmiersprachen und Hilfsmittel gibt es viele, z.B. HTML

EinAlexander  11.02.2019, 08:18
Programmiersprachen und Hilfsmittel gibt es viele, z.B. HTML

Jetzt hast Du ausgerechnet ein Beispiel genommen das weder kompiliert Erden kann noch eine Programmiersprache ist.

3
PeterKremsner  11.02.2019, 09:04

Markup Sprachen sind keine Programmiersprachen

1

com Dateien stammen noch aus MS-DOS zeiten, die wurden heute durch Exe Dateien ersetzt.

Zur Erstellung von Anwendungen allgemein braucht man allgemein irgendeinen Editor mit welchem du den Code schreibst, einen Compiler welcher den Code in Maschinencode übersetzt und einen Linker, welcher die einzelnen Teile des, vom Compiler, erstellten Codes zu einem Programm zusammensetzt. IdR nimmt man aber oft den Linker als Teil des Compilers an, weil viele Compilersuits zB gcc direkt den Linker nach dem Kompilieren ausführen und es nach außen daher wie ein Programm wirkt.

Ich kenne allerdings keinen Compiler welcher dir .com Dateien erstellt, ich kenne nur welche die dir Exe Dateien erstellen können, wie zB der oben genannte gcc für Windows.

ralphdieter  11.02.2019, 09:40
Ich kenne allerdings keinen Compiler welcher dir .com Dateien erstellt

Eigentlich sollte jeder Compiler aus den 80ern und 90ern geeignet sein. Turbo Pascal 3 scheint noch verfügbar zu sein. vielleicht findet man auch MSVC6 in irgendeinem Museum.

Schlimmstenfalls müsste man dafür eine VM mit DOS oder Win95 aufsetzen, aber auf einem aktuellen System würde ich diese Downloads sowieso nicht auspacken.

3
  1. Schnapp dir einen beliebigen Hexeditor.
  2. Tippe folgende Zeichen ein: B800 4CCD 21
  3. Speichere den ganzen Klumpatsch unter "exit.com"
  4. Glückwunsch! Du hast jetzt das kleinste gültige DOS-Programm in einer COM-Datei mit nur 5 Byte Größe.
  5. Du willst jetzt Assembler lernen! ;)
Woher ich das weiß:eigene Erfahrung
silikonkappe  11.02.2019, 17:47

PS: Der Quelltext zum obigen Binary-Blöbchen lautet wie folgt:

mov ax, 4C00h
int 21h

Das ist im Grunde genommen alles. Interrupt 21h erwartet den EXIT-Befehl 4Ch in AH und den Rückgabewert 00h in AL. Fertig. :)

Wenn du das in "exit.asm" speicherst, kannst du eine "exit.com" Datei zum Beispiel mit dem NASM-Assembler erzeugen:

nasm -f bin -o exit.com exit.asm

Heutzutage arbeite ich zwar eher mit Hochsprachen auf Linux, aber Assembler (egal auf welcher Plattform) ist schon was feines. :)

2

Nimm eine beliebige Datei und hänge .com an ihren Namen an. ^^

Okay, jetzt aber zur eigentlichen Antwort: Dazu benötigst du Kenntnisse in einer "geeigneten" Programmiersprache (Java, der ganze .NET-Kram, Python usw. fliegen daher erstmal raus) und einen Compiler/Linker, der DOS-Binaries erstellen kann.

Siehe auch:

ralphdieter  11.02.2019, 09:25

Cool: hellowld.com mit gcc. Ich wusste doch, dass das irgendwie geht :-)

Beim Durchlesen des Blogs kommt mir aber der Verdacht, dass es einfacher wäre, die Assemblerbefehle in debug einzutippen und dann als .com zu speichern. So habe ich das früher gemacht, als ich noch klein war und Windows benutzte.

Wird denn debug.exe nach Windows XP noch mitgeliefert?

3
Isendrak  11.02.2019, 12:06
@ralphdieter
So habe ich das früher gemacht, als ich noch klein war und Windows benutzte.

Und jetzt biste groß und benutzt Linux? XD

Wird denn debug.exe nach Windows XP noch mitgeliefert?

Gabs das denn bei XP überhaupt noch? Bin mir nicht ganz sicher, aber ich mein das war schon bei 2000 (bzw. ab NT im Allgemeinen) nicht mehr dabei.

Aber zumindest ab Windows 7 ists definitiv nicht mehr dabei.

2