6.1 Programmiersprachen der ersten bis dritten Generation

6.1.1 Maschinensprache

Programme, die von einem Programmierer direkt in einer bestimmten Maschinensprache geschrieben wurden, sind meist kleiner und schneller als Programme deren Quellcode von einem Übersetzungsprogramm in Maschinencode übersetzt wurde.

Eine Maschinensprache ist eine Programmiersprache, die ein Prozessor direkt ausführen kann.

Der Programmcode eines in einer Maschinensprache geschriebenen Programms wird Maschinencode genannt. Sowohl Befehle als auch Daten bestehen dabei aus einer Folge von Nullen und Einsen (Bitfolge).

Eine einheitliche Maschinensprache gibt es nicht. Soll ein Programm auf unterschiedlichen Prozessortypen laufen, muss für jeden Typ ein geeigneter Maschinencode erzeugt werden.

Merke: Maschinensprache
Maschinencode

1101 0000 0000 0111 1011

1011 1111 1110 1000 1010

1101 0010 0000 0111 1111

Abb. 6-1: Ausschnitt aus einem Maschinencode (Beispiel)

Maschinensprachen gelten als Programmiersprachen der ersten Generation.

6.1.2 Assemblersprache

Damit ein Programmierer nicht zu jedem Befehl die entsprechende Bitfolge kennen muss, gibt es zu einer Maschinensprache häufig eine passende Assemblersprache.

Von einer Maschinensprache unterscheidet sich die dazu passende Assemblersprache lediglich dadurch, dass Befehle und Daten nicht mehr als für Menschen schwer verständliche Folge von Bits dargestellt werden müssen.

Um einen bestimmten Befehl aufzurufen, kann der Programmierer bei einer Assemblersprache anstelle der entsprechenden Bitfolge eine aus dem Zweck des Befehls abgeleitete Abkürzung (Mnemonic) verwenden. Zum Beispiel kann mit dem Befehl ADD eine Addition durchgeführt werden.

Auch Daten müssen nicht mehr binär codiert werden, sondern können zum Beispiel als Text, dezimal oder hexadezimal dargestellt werden.

Liegt der Programmcode in dieser Form vor, spricht man von Assemblercode. Die Übersetzung des Assemblercodes in die Bitfolgen der dazugehörenden Maschinensprache übernimmt ein Übersetzungsprogramm, das Assembler genannt wird.

Merke: Assemblersprache
Assemblercode

CLO

MOV AL, 2     ;kopiert eine 2 in das Register AL

ADD AL, 3     ;Addiert 3 zu dem Wert in Register AL

END

Abb. 6-2: Assemblercode (Beispiel)

Für komplexe Programme direkt Assemblercode zu erstellen ist aufwendig und nicht sehr komfortabel. Eine sinnvolle Strukturierung des Programms ist nicht einfach, was sich negativ auf die Wartbarkeit des Programms auswirkt. Außerdem, müsste das Programm für jeden Prozessortyp, der eine andere Maschinensprache „spricht“, neu geschrieben werden.

Im Gegenzug kann Assemblercode sehr effizient programmiert werden, da der Programmierer diesen unmittelbar auf den jeweiligen Prozessortyp optimieren kann. Spielen die Performance oder der Speicherbedarf eines Programms eine entscheidende Rolle, kann es sinnvoll sein, diese direkt in einer Assemblersprache zu schreiben. Ein Beispiel hierfür wären aufwendige wissenschaftliche Berechnungen.

Assemblersprachen werden als Programmiersprachen der zweiten Generation bezeichnet.

6.1.3 Höhere Programmiersprache

In der Regel werden Programme heute mit einer höheren Programmiersprache, wie zum Beispiel Java, C++ oder C#, erstellt. Deren Programmcode lehnt sich eng an eine menschliche Sprache an (meist Englisch), lässt sich besser strukturieren und ist daher für Menschen verständlicher. Außerdem ist er hardwareunabhängig, das heißt, er ist nicht auf einen bestimmten Prozessortyp zugeschnitten.

Letztendlich muss jedoch auch dieser Programmcode in eine Maschinensprache übersetzt werden, bevor das Programm ausgeführt werden kann. Das ausführbare Programm ist dann nicht mehr hardwareunabhängig und läuft nur auf den Prozessortypen, die die gewählte Maschinensprache verstehen.

Höhere Programmiersprachen werden als Programmiersprachen der dritten Generation bezeichnet.