Programmiersprachen in Assemblersprache implementiert

7

Vor kurzem bin ich auf JONESFORTH , das ein Interpreter für die Programmiersprache Forth ist, die in einfacher Assemblersprache implementiert ist.

Ich finde diese Implementierung interessant, weil sie zeigt, wie eine Sprache in einer Assemblersprache implementiert werden kann, obwohl ich verstehe, dass die Implementierung einer Sprache ein ernsthafter Portabilitätskompromiss sein kann.

Also habe ich mich gefragt, ob es noch andere Programmiersprachen in der Assemblersprache gibt, deren Quelle noch verfügbar ist (und vielleicht sogar noch in Entwicklung ist)?

    
Peter Mortensen 17.03.2011, 18:59
quelle

5 Antworten

7

Es ist zwar möglich eine Sprachimplementierung in Assembly zu schreiben, aber für die meisten Sprachen ist es aus verschiedenen Gründen nicht ratsam, dies zu tun: Assemblercode ist notorisch schwer zu entwickeln und zu pflegen, und es ist per Definition nicht tragbar.

Das heißt, einige Sprachen sind wesentlich einfacher zu Implementierungen für:

  • Es ist sehr einfach, eine Montage herzustellen Implementierung für Brainfuck

  • Forth hat eine Reihe von Implementierungen in Assembly, weshalb es in verwendet wird die Firmware mehrerer Nicht-PC-Arbeitsplätze. Sie können einige Assembly-Implementierungen für verschiedene Plattformen hier finden.

  • Viele BASIC Interpreter wurden in Assembly geschrieben - tatsächlich war das wahrscheinlich für die meisten BASIC-Implementierungen in die verschiedenen Heimcomputer der späten 70er und frühen 80er Jahre. Einige finden Sie hier .

thkala 17.03.2011, 19:23
quelle
6

Mehrere Versionen von Turbo Pascal seit 1.0 wurden in Assembler geschrieben . Es war die einzige Möglichkeit, einen Editor, einen Compiler, einen Debugger und das kompilierte Programm in den 64-KB-RAM der Zeit zu packen, und es ermöglichte brandneue Edit-Compile-Debug-Geschwindigkeiten, die noch nie zuvor gesehen wurden.

    
Apalala 18.03.2011 14:41
quelle
6

Pico Lisp hat kürzlich (in den letzten Jahren) von C auf x86-64 Assembler umgestellt. Das ist das einzige Beispiel, das mir in der "modernen" Ära vorschwebte. Es gibt einige ältere, vom Assembler stammende Lisps, die noch im Gebrauch sind. Eigentlich warten Sie, jemand schrieb kürzlich ein Schema in ARM-Assembler (http://armpit.sourceforge.net/index.html). Ich weiß nicht, warum sie so ein verrücktes Ding gemacht hätten und ich habe es mir nicht genau angeschaut. Natürlich ist es sehr üblich, in C zu schreiben und einige asm-Funktionen hinzuzufügen, um call / cc oder ähnliches zu implementieren.

Der BDS C-Compiler aus den 1980er Jahren wurde in 8080 Assembler geschrieben und der Quellcode wurde vor ein paar Jahren veröffentlicht, aber es ist hauptsächlich von historischem Interesse.

    
none 19.02.2012 08:16
quelle
2

Obwohl vm und einige andere Abschnitte von luajit nicht in der Assembly enthalten sind, werden sie für mehrere Plattformen (hauptsächlich x86) in Makro-Assemblierung geschrieben, nur für die Geschwindigkeit, die es bietet (Mike Paul mag andere Gründe haben, aber ich glaube Dies ist der Hauptgrund). Der Macro-Prozessor ist ebenfalls benutzerdefiniert und verwendet lua jedoch.

    
Necrolis 26.03.2011 12:34
quelle
2

Letztendlich wird jede Sprache in Assembler implementiert, ein C-Compiler muss irgendwie + irgendwo einer Assembleranweisung zuordnen. Es gibt nur eine große Variabilität, wie groß ein Teil einer Sprache im Assembler-Kernel ist und wie ein großer Teil der Sprache in der Sprache selbst definiert ist. Wenn Sie auf jonesforth schauen, werden Sie sehen, dass ein Teil des Kernels, sogar in der Assembler-Datei, tatsächlich ein Forth-Code ist, kein Assembler-Code.

Also kann das Kriterium sein, ob die Sprache des Hauptprogramms Assembler oder die Sprache selbst ist. Wichtiger ist vielleicht, ob eine Sprache eine andere zu erstellende Sprache benötigt, z. eine Lisp-Implementierung in Pascal, Gforth implementiert mit C. Es kann eine Verpflichtung sein, von einem Compiler abzuhängen, den Sie nicht kontrollieren, und Sprachstandards, die einige Praktiken veralten lassen. Um mit den neuen Funktionen eines Prozessors in einem Compiler Schritt zu halten, ist fundiertes Wissen über die Assemblierung erforderlich, unabhängig davon, ob Ihr Compiler in sich selbst oder in Assembly geschrieben ist.

Solange Sie die Quelle haben, ist die Sprache nicht tot. So können Sie FIG-Forths (1980) betrachten. jonesforth hat einen Teil seiner Inspiration von meinem ciforth, einem i86 Assembler Forth für 16/32/64 Bits.

Ich kann besonders "yourforth" einen Forth in Assembler empfehlen, den ich speziell für Bildungszwecke gemacht habe. Es gibt Übungen, aber diese sind noch nicht abgeschlossen: Ссылка

    
Albert van der Horst 09.02.2015 23:06
quelle