Assembler

Lernt man heute Programmieren, geschieht dies in der Regel mit einer höheren Programmiersprache. Das bedeutet nicht, dass die Sprache schwerer zu verstehen oder zu erlernen ist. Im Gegenteil: Es bedeutet, dass sprechende Bezeichner für unterstützte Aktionen bereitgestellt werden. Das könnten zum Beispiel Funktionen wie “open”, “close” oder “write” sein. Bei einer direkten Interaktion auf Maschinenebene, also mit Assembler, ist ein solcher Vorgang deutlich komplizierter. Derartige Funktionen anzubieten klingt absolut logisch, ist aber nicht immer so gewesen. Anders ausgedrückt: Höhere Programmiersprachen bieten Sprache ein hohes Level an Abstraktion (Wikipedia: weglassen von Einzelheiten, überführen in etwas Allgemeineres). In diesem Artikel erklären wir welche Abstraktionsebenen es gibt und was “hinter den Kulissen” passiert.

Erste Programmiersprachen

Ein kurzer Anriss der Historie, ohne aus dem Artikel eine langweilige Geschichtsstunde werden zu lassen: Die ersten Programmiersprachen wurden über Lochkarten an Computer übergeben. Das Prinzip kann man sich ähnlich wie bei Spieluhren vorstellen, in denen sich eine Walze mit angeordneten Stiften dreht:

Musical box open.jpg
Musical box open“ von Simon A. EugsterEigenes Werk. Lizenziert unter CC BY-SA 3.0 über Wikimedia Commons.

Die Positionen haben, sowohl auf der Spieluhr als auch auf der Lochkarte, eine fest zugewiesene Funktion. Bei der Spieluhr erzeugt jede Position einen anderen Ton. Bei der Lochkarte werden einzelne Bits gesetzt. Ein Loch steht für eine 1, kein Loch entsprechend eine 0 bzw. “Bit nicht gesetzt”. Ohne zu sehr ins Detail gehen zu wollen, arbeiteten diese Steueranweisungen direkt auf Maschinenebene. Es wurden Anweisungen für den Prozessor geschrieben. Das ist analog zu heutigen Assemblersprachen, die es immer noch gibt. Nur ist das Stanzen von Lochkarten um einiges aufwendiger.

Erste Übersetzer für Programmlogik

Als Computer leistungsfähiger wurden, nutze man diese Möglichkeiten um Übersetzer für Programmlogik zu schreiben. Diese konnten verallgemeinerten Programmcode in den jeweiligen Maschinencode, also Assembler-Anweisungen, übersetzen. Erste Vertreter dieser Kategorie waren bspw. die Sprachen Fortran und ALGOL.

Das gleiche Konzept findet sich auch heute noch wieder. Die sogenannten Compiler sind komplexer geworden, basieren aber immer noch auf dem gleichen Prinzip. Sehr anschaulich wird dies z.B. bei der Sprache “C”, welche auch als kompilierte Sprache gilt. Sie als Programmieren schreiben für menschen lesbaren Programmcode, führen den Compiler aus und erhalten Maschinencode. Am Ende entsteht eine ausführbare Datei. Man kann jedoch auch die im Zwischenschritt erzeugten Assembler-Anweisungen einsehen.

Interpretierte Sprachen

Ein weiterer Entwicklungsschritt sind die interpretierte Sprachen. Als die Computer noch leistungsfähiger und Ressourcen wie bspw. Arbeitsspeicher günstiger wurden, ist neben kompilierten Sprachen ein weiteres Konzept entstanden. Aus der Sicht des Programmierers ist die Abstraktionsebene ähnlich zu übersetzen Sprachen wie bspw. “C” oder “C++”. Vertreter dieser Kategorie sind zum Beispiel “JavaScript”, “Python”,  “PHP” und viele weitere.

Als Beispiel konzentrieren wir uns einfach mal auf PHP, da die Syntax und der Quellcode stark an C/C++ angelehnt sind. Der große Unterschied ist an der Stelle für den Entwickler nicht die Syntax. Viel mehr die Arbeitsschritt sind anders. Software muss nach einer Änderungen nicht erneut übersetzen werden. Sie wird einfach direkt aufgerufen. Zur Laufzeit, also wenn das Programm gestartet wird, kommt ein Interpreter zum Einsatz. Der Interpreter selbst ist wiederum ein kompiliertes Programm, dass in ausführbarer Maschinensprache vorliegt. Er verarbeitet in unserem Beispiel den Quellcode des PHP Programms und erzeugt dann die notwendigen Steueranweisungen. Soll das PHP Programm “Hallo Welt” ausgeben, würde der Interpreter dies verstehen und dafür sorgen, dass der dafür relevante Maschinencode aufgerufen wird.

Fazit

Das war eine grobe Übersicht, über die historische Entwicklung der Programmiersprachen. Wichtig zu wissen: Der Prozessor arbeitet nach wie vor mit Maschinensprache. Assembler-Anweisungen sind auch heute noch genauso relevant. Kompilierte Sprachen sind in vielen Bereichen vorherrschend. Sie haben ein Smartphone? Die installierten Apps wurden zum Beispiel auch alle kompiliert. Interpretierte Programmiersprachen begegnen ihnen auch täglich, speziell im Internet. Im wesentlich besteht ihr Vorteil in kürzeren Entwicklungszeit von Software, da sie umfangreiche Bibliotheken mit fertigen Lösungen für wiederkehrende Probleme gibt.

Schreib einen Kommentar

Your email address will not be published.