Hallo Siro,
NACHTRAG
Vor so 30 Jahren, hatte ich einen C-Compiler für den 6301 (CMOS-Derivat des 6801, ein Singlechip von Hitachi) mit genau dem selben Problem. Allerdings gab es damals noch keine besseren Compiler für diesen Chip.
Ich habe mit dann in AWK einen Optimierer geschrieben, welcher den Assembler-Source bearbeitet hat und diesen dann mit dem Assembler übersetzt.
AWK ist eine Skriptsprache zum bearbeiten strukturierter Textdateien und unter Unix/Linux standardmässig vorhanden, ist aber auch auf andere Betriebssysteme portiert worden.
C war vom Konzept schon immer sehr flexibel, nicht nur weil die Standart-Bibliothek problemlos mit eigenen Versionen ersetzt werden kann, was bei den meisten Programmiersprachen nicht möglich ist.
Ein C-Compiler bestand ursprünglich aus mehreren Teilen, welche heute oft in einem Programm zusammengefasst sind. Die einzelnen Programmteile waren aber auch einzeln benutzbar:
preprozessor: Löst die #includes und #defines auf und erzeugt eine einzelne Datei.
lint: Kam erst später hinzu und macht die genaue Typenprüfung. Musste früher oft separat erworben werden, ist heute aber in jedem Compiler fest drin.
cc: Der eigentlich Compiler, welcher als Ausgabe ein Assembler-Listing erzeugt. Oft auch als zwei Programme implementiert (Parser und Codegenerator)
asm: Der normale Assembler
link: der Linker
Unter Unix gab es auch einen Pascal-Compiler, welcher Pascal in einen C-Source übersetzt hat.
Aus diesen historischen Gründen, können heutige C-Compiler meist immer noch als nur Preprozessor verwendet werden oder nur das Assembler-Listing erzeugen, welches dann mit dem Assembler übersetzt werden kann.
Übrigens PL/M, 1973 von Garry Killdall für Intel entwickelt, hatte auch so einen Macro-Codegenerator
Da gab es an den Macro-Grenzen auch diese unnötigen Register-Tauschereien.
PL/M lief unter ISIS, einem Betriebssystem von Intel. Dies bewegte Killdall dazu CP/M zu entwickeln, welches hauptsächlich in PL/M geschrieben war. CP/M war eigentlich ein Klone von RTS, welches von DEC stammte.
MfG Peter(TOO)
Lesezeichen