Heim

Maschinensprache

Unter Maschinensprache (auch Maschinencode) versteht man ein System von Instruktionen und Daten, die der Prozessor eines Computers direkt ausführen kann.

Im Gegensatz zur Assemblersprache oder Hochsprachen handelt es sich um einen für den Menschen kaum verstehbaren Binärcode, der nur von Experten für den jeweiligen Code gelesen wird und zum Beispiel mit speziellen Programmen, so genannten Maschinensprachemonitoren (abgekürzt auch einfach Monitor genannt), bearbeitet werden kann.

Der Maschinencode wird meist von einem Assembler oder Compiler erzeugt. Direkt in Maschinensprache muss nur programmiert werden, wenn kein Assembler für den Zielprozessor zur Verfügung steht.

Wird von der Programmierung in Maschinensprache gesprochen, wird heute üblicherweise die Maschinenprogrammierung in Assemblersprache unter Verwendung eines Assemblers gemeint, der das als Textdatei vorliegende Assemblerprogramm in binäre Maschinenbefehle übersetzt.

Inhaltsverzeichnis

Unterschied zur Assemblersprache

Die Maschinensprache besteht aus einer Folge von Bits. Da dies praktisch unlesbar ist, wird jede zulässige Bitfolge mit einem oder mehreren Namen – den sogenannten Mnemoniks – und evtl. Zahlen dargestellt. Ein Assembler übersetzt nach der Programmerstellung die Mnemoniks nahezu eins zu eins in die Maschinensprache.

Beispiel
Befehl: Lade Register A, Mnemonik: LDA, Maschinencode beziehungsweise Opcode: 00110101
x86-Befehl: MSDOS-Softwareinterrupt 21, Mnemonik: INT 21, Maschinencode: 1100110100100001 (hexadezimal 0xCD21)

Überblick über die typische Funktionalität einer Maschinensprache

Die Maschinensprache enthält die direkt vom Prozessor verstandenen Befehle. Damit ein Computer numerische Probleme lösen kann, muss ihm der Lösungsweg in einer ihm verständlichen Art und Weise mitgeteilt werden. Das Programmiermodell eines Prozessors beschreibt die für die Programmierung relevanten Hardware-Details. Typischerweise hat ein Prozessor eine zumeist kleine Zahl interner Register, die zur kurzzeitigen Zwischenspeicherung von Rechenoperanden und Ergebnissen benutzt werden. Der Prozessor kann über den Adressbus und Datenbus seinen angeschlossenen Hauptspeicher, sowie Schnittstellen zu externen Geräten ansprechen. Manche Architekturen verfügen nicht über Register, die Datenverarbeitung läuft in diesen Fällen in einem Stapel-, einem Variablen-Kontext und dem Hauptspeicher ab.

Grundlegende Maschinen-Befehle lassen sich in folgende Kategorien unterteilen:

In vielen modernen Prozessoren sind die Befehle der Maschinensprache, zumindest die komplexeren unter ihnen, intern durch Mikroprogramme realisiert. Das ist insbesondere bei der sogenannten CISC-Architektur der Fall.

Programmerstellung

Intern ist jeder Befehl der Maschinensprache durch ein oder mehrere Zahlenwerte kodiert. Diese Zahlenwerte bestehen aus dem Opcode, der die Art des Befehls festlegt, eventuell gefolgt von einem oder mehreren Bytes an Daten zu diesem Befehl. Eine sinnvolle Folge von solchen Zahlencodes im Hauptspeicher bzw. als Datei gespeichert bildet demnach ein Programm. Es gibt nun verschiedene Arten, solche Programme zu erstellen:

Ein Beispiel hierfür ist die Programmiersprache Java, dessen Zwischencode (auch Bytecode genannt) von einem Interpreter ausgeführt wird. Dies geschieht für den Benutzer transparent, wenn z. B. ein Applet im Internet Browser ausgeführt wird. Neben Java werden auch sämtliche .NET Sprachen, wie beispielsweise C# in einen Zwischencode (engl. Intermediate Language) übersetzt, welcher anschließend zur Laufzeit innerhalb der CLR von einem JIT-Compiler in die entsprechende Maschinensprache übersetzt wird.

Geschichte

Obwohl es bis in die 50er Jahre hinein noch keine Compiler gab, wurden Programme durchaus schon in Hochsprachen entworfen, mussten dann aber manuell in Maschinensprache übersetzt werden.

Literatur


Siehe auch