Wie funktioniert eine Programmiersprache?

Ein gruß in die runde!

Ja, wie funktioniert das?
Gibt es eine Grundsprache die mit dem z.b. Intel-Chip kommuniziert, UND in der dann auch alle weiteren der vielen Sprachen dann erst wieder programmiert werden müssen?

Loki

Hi,

Ja, wie funktioniert das?
Gibt es eine Grundsprache die mit dem z.b. Intel-Chip
kommuniziert, UND in der dann auch alle weiteren der vielen
Sprachen dann erst wieder programmiert werden müssen?

Ja. Diese „Grundsprache“ nennt man Assembler - es gibt für jeden Prozessor einen eigenen Assembler. Was diese Assemblerbefehle anrichten, ist quasi in der Hardware verdrahtet.

Auf dieser Assemblersprache basierend wurden dann die weiteren Programmiersprachen höherer Ebenen entwickelt.

Das ist so die Kurzform. Ein Assemblerprogramm sieht z.B. so aus:

http://www.crowdserver.org/m/aes_enc.asm

Gruß,

Malte.

kann ich so nicht stehen lassen…

Ja. Diese „Grundsprache“ nennt man Assembler - es gibt für
jeden Prozessor einen eigenen Assembler. Was diese
Assemblerbefehle anrichten, ist quasi in der Hardware
verdrahtet.

also, die Grundsprache eines Computers nennt man Maschinensprache. Jeder Prozessor erkennt bestimmte Bitmuster als Befehl, die er dann ausführt. Die allerersten Computer wurden auch genau so programmiert: die jeweiligen Bitmuster wurden per Hand über Schalter erzeugt.

Für den Programmierer ist es aber extrem mühsam, diese Bitmuster einzugeben. Dafür gibt es die sogenannten Assabler: Für jeden Befehl gibt es eine halbwegs sprechende Abkürzung, Daten können in Klartext eingegeben werden etc. Der Assambler nimmt dann diese Befehlsfolgen (in Form einer Textdatei) und setzt die einzelnen Befehle in Maschinensprache um. Im Prinzip findet dabei eine 1:1 Ersetzung statt (auch wenn moderne Assembler jede menge Zusatzfeatures haben).

Höhere Programmiersprachen fassen mehrere Maschinensprache-Befehle zusammen und formen daraus mächtigere Befehle. Auch vereinfachen diese Sprachen den Zugriff auf Daten, bieten vorgefertigte Bibliotheken mit häufig benötigten Funktionen an etc. Bei Compilersprachen wird dabei der komplette Quellcode (der wiederum in Form einer Textdatei vorliegt) direkt in Maschinensprache übersetzt (also nicht zuerst in Assambler). Interpretersprachen lesen jede Programmzeile einzeln aus und „interpretieren“ den Inhalt, d.h. die jeweiligen Befehle werden erst zur Ausführungszeit in eine Folge von Maschinensprachenbefehlen umgesetzt.

Nebenbei gibt es noch andere Arten von Programmiersprachen, die teilweise nach unterschiedlichen Konzepten funktionieren. Allen gemeinsam ist, dass der Computer AUSSCHLIEßLICH Maschinensprache versteht (wobei es einige Spezialprozessoren gibt, bei denen diese Aussage auch nicht ganz stimmt). D.h. Jedes Programm muss zur Ausführungszeit irgendwie in Maschinensprache übersetzt werden.

Die ursprüngliche Aussage stimmt allerdings insofern, als dass jedes Maschinenspracheprogramm „disassembliert“ werden kann - da ja jeder Assamblerbefehl einem Maschinensprachebefehl entspricht. Wenn man also z.b. ein Programm in „C“ schreibt und das kompiliert und sich das Kompilat mit einer moderneren Entwicklungsumgebung ansieht, wir automatisch disassembliert, wodurch der Eindruck entsteht, dass Assabler als Zwischensprache fungiert.

Es gibt schon Sprachen, die zuerst auf eine Zwischensprache umgesetzt werden, bevor sie tatsächlich in Maschinensprache umgesezt werden. Das ist aber nicht zwingend notwendig.

*** Klugscheissmodus Ende ***

Erwin

2 „Gefällt mir“

Noch Was.
Hallo Loki,

Das System mit, der von Erwin erwähnten, Zwischensprache nennt man P-Code (Pseudo-Code) oder VM (Virtuelle Maschine).

Hierbei wird Maschinen-Code für einen nicht existierenden, also virtuellen, Prozessor erzeugt. Die hat mehrere Vorteile

  1. Das Programm ist meist sehr kompakt.
  2. Für einen neuen Prozessor, bzw. Betriebssystem muss nur der Simulator angepasst werden.
  3. Durch den Simulator hat man die Möglichkeit zusätzlich Schutzmechanismen einzubauen um zu verhindern, dass bei einem Programmfehler das ganze System abstürzt oder ein Programm Daten eines anderen Programms beschädigt.

Der Nachteil ist, dass P-Code etwas langsamer als Maschinen-Code ist.

Bei Assemblern und Compilern wird noch zwischen native und cross unterschieden.
Ein Nativ-Compiler läuft in der gleichen Umgebung (CPU und Betriebssystem) wie das von ihm übersetzte Programm.
Ein Cross-Compiler erzeugt ein Programm, welches in einer anderen Umgebung läuft.

Um einen neuen Compiler für eine neu CPU zu erstellen, nimmt man meist das Quell-Program eines bestehenden Compilers und passt den so an, dass dass er Code für die neue CPU erzeugt. Dieses wird nun mit dem bestehenden Compiler übersetzt und man erhält einen Cross-Compiler. anschliessend wird nun das Programm mit dem Cross-Compiler nochmals übersetzt und man erhält einen Nativ-Compiler welcher auf der neuen CPU funktioniert (Ist, wie alles in der Realität, ein bischen komplexer, wird aber im Prinzip so gemacht).

MfG Peter(TOO)