Hallo Yedi386,
Und wie genau funktioniert ein Interpreter?
Aber, wo sitzt dieser Interpreter? Etwa fest in Chips eingebrannt? Und diese Nullen
und Einsen leitet er
dann durch die Schaltkreise weiter zu den Bauteilen
(Schaltern/Relais). Richtig?
Grundsätzlich kann eine CPU nur Zahlen verarbeiten, alles andere ist eine Illusion!
Die Zahlen bestehen aus Nullen und Einsen (den Bits), welche nach logischen Regeln miteinander verarbeitet werden können. Desweiteren kann man mehrere Bits z.B. zu Bytes (8-Bit) zusammenfassen.
Buchstaben kennt eine CPU auch nicht, diese werden als Zahlen abgelegt. Also in der Art: 1=A, 2=B, 3=C …
Die CPU kennt festgelegte Befehle, wie z.B. „Addiere A und B“ oder „Speichere A an Speicherstelle xyz“. Diese Befehle sind dann Durchnummeriert und werden auch wiederum als Zahl gespeichert.
Welche Befehle eine CPU kennt und welchem Befehl welche Nummer zugeordnet ist, bestimmt der Hersteller der CPU und ist dann in entsprechenden Dokumenten beschrieben.
Eine sinnvolle Anordnung dieser Befehlscodes ergibt dann ein Programm. Normalerweise arbeitet die CPU einen Befehl ab und danach den nächsten darauf folgenden. Es gibt eine spezielle Gruppe von Befehlen, welche diese lineare Abarbeitung umlenken können. Teilweise erfolgt diese Umleitung aber nur, wenn bestimmte Bedingungen erfüllt sind, also wenn z.B. A den Wert Null hat, geht es linear mit dem nächsten Befehl weiter, andernfalls wird der Code an einer anderen Stelle fortgesetzt.
Dies wäre jetzt die Beschreibung des binären Programms, Ist Ideal für Maschinen, aber Programme müssen von Menschen erstellt werden und wer kann sich schon diese ganzen Zahlen merken?
Dieses Problem hatte Lady Ada schon vor über 150 Jahren
http://de.wikipedia.org/wiki/Ada_Lovelace
Sie erfand dann die Mnemonics, wodurch die Assemblersprache erfunden war. Sie ordnete den Codes Buchstabenkürzel zu, also JMP für JuMP, ADD für Addition, SUB für SUBtraction usw. Damit wurden die Programme für Menschen lesbar, aber die CPU kann damit nichts anfangen.
Also hat man ein Programm entwickelt, den Assembler, welcher im wesentlichen die Mnemonics mit den entsprechenden Codes ersetzt. Man erstellt also eine Datei im Assemblerformat und der Assembler erzeugt daraus eine neue Datei mit dem binären Programmcode (Maschinencode), welcher dann die CPU abarbeiten kann.
Nun ist aber Assembler eine recht primitive Sprache, welche ursprünglich nur aus den grundlegenden logischen Verknüpfungen bestand, kompliziertere Befehle hätten einfach zu viele Transistoren benötigt. Also konnte so eine CPU nur Addieren und Subtrahieren. Eine Multiplikation musste also schon als Programm erstellt werden.
Ein anderes Problem ist, dass Assembler immer nur zu einem bestimmten CPU-Modell passt. Nimmt man eine CPU einer anderen Modellreihe, muss das Assemblerprogramm an dieses angepasst werden.
Daraus entstand dann die Idee der höheren Programmiersprachen.
Hier muss dann der Programmierer keine Ahnung vom Maschinencode mehr haben und ein einzelner Befehl in der Hochsprache wird dann in hunderte Maschinenbefehle übersetzt, welche die CPU dann ausführt.
Das doofe an den Hochsprachen ist dann aber, dass die CPU damit noch weniger anfangen kann. Also muss da wieder ein Programm her …
Die Aufgabe dieses Programms ist es dann den Programmtext zu analysieren, bei ungültigen Konstrukten Fehlermeldungen auszugeben und andernfalls entsprechenden Maschinencode für die CPU bereit zu stellen.
Diese Übersetzungsprogramme sind entweder Compiler oder Interpreter.
Ein Interpreter analysiert die aktuell auszuführende Code-Zeile und ruft dann entsprechende Unterprogramme auf um die Aufgabe abzuarbeiten. Dann macht er mit der nächsten Zeile weiter. Allerdings vergisst er dabei alles was er schon analysiert hat. Wird also so eine Code-Zeile mehrfach abgearbeitet, dann muss sie auch entsprechend oft analysiert werden. Der Vorteil eines Interpreters ist aber, dass er relativ einfach und klein ist. Somit kann ein Interpreter fest im ROM eines Computers abgelegt werden. Da ein Programm immer nur Zeilenweise betrachtet wird, gibt es Einschränkungen für die Programmiersprache.
Eine typische Interpretersprache war BASIC.
Ein Compiler analysiert das ganze Programm und erzeugt daraus Maschinencode. Zur Ausführung wird dann nur noch die Datei mit dem Maschinencode benötigt. Compiler sind aber grosse und komplizierte Programme. Durch die Analyse des gesamten Programms, kann ein Compiler aber auch noch Optimierungen durchführen, typisch ist die Optimierung nach möglichst schnellem oder möglichst kompaktem Code. Desweiteren kann ein Compiler auch Code aufdecken, welcher gar nie ausgeführt werden kann, ein Interpreter merkt das nicht.
Compiler werden oft auch als Crosscompiler eingesetzt. Dabei läuft dann der Compiler auf einem PC und erzeugt Code für einen Micro Controller welcher eine ganz andere CPU und gar kein Betriebssystem besitzt.
MfG Peter(TOO)