Maschinensprache
Unter Maschinensprache (auch Maschinencode) versteht man die Sprache, die ein Prozessor direkt ausführen kann, sozusagen seine Muttersprache. Im Gegensatz zur maschinennahen Assemblersprache oder Hochsprachen handelt es sich um eine für den Menschen kaum lesbare Sprache, die allenfalls von Experten mit einem sogenannten Maschinensprachemonitor bearbeitet werden kann.
Unterschiede zu den Hochsprachen
- Maschinensprachen bieten nur sehr einfache Befehle
- Ein Programm kann nur auf genau dem Prozessor ablaufen, für dessen Maschinensprache es programmiert wurde. Diese Einschränkung ist weniger schwerwiegend als es zunächst scheint. 24-Bit-Code, der 1964 für ein IBM S/360 geschrieben wurde, läuft noch heute auf zSeries-Rechnern mit 64-Bit Architektur. 16-Bit-Code, der für den mittlerweile 25 Jahre alten 8086 Prozessor programmiert wurde oder 32-Bit-Code, der für 80386 programmiert wurde, ist auf heutigen Pentium-Rechnern lauffähig. Da die Intelmikroprozessor-Architektur einen sehr großen Marktanteil hat (auch andere Firmen wie AMD benutzen sie), und die IBM Architektur den Mainframeberich dominiert, sind Maschinensprachprogramme, die für diese Prozessoren geschrieben worden sind, sehr langlebig.
- Anm. zu obigem Stichpunkt: die Möglichkeit des Ausführens von Maschinensprache auf einer späteren CPU-Generation wird als Abwärtskompatibilität bezeichnet. Hierfür ist nicht der Verbreitungsgrad einer Architektur, sondern der Entwurf nachfolgender CPU-Generationen ausschlaggebend.
Überblick über die typische Funktionalität einer Maschinensprache
Die Maschinensprache enthält die direkt vom Prozessor verstandenen Befehle.
Das Programmiermodell eines Computers beschreibt die für die Programmierung relevanten Hardware-Details.
Typischerweise hat ein Computer einige Register, also Speicher in die 8, 16, 32 oder 64 Bit Daten gespeichert werden können. Der Prozessor kann über den Adressbus und Datenbus seinen angeschlossenen Hauptspeicher, sowie Schnittstellen zu externen Geräten ansprechen.
Grundlegende Maschinen-Befehle lassen sich in folgende Kategorien unterteilen:
- Arithmetische Operationen
- Führen Berechnungen durch
- Speicheroperationen
- Übertragen Daten zwichen Prozessor und Speicher
- Vergleiches Operationen
- Vergleich von Werten
- Steueroperationen
- Verzweigungen, die den Ablauf des Programms beeinflussen
Programmerstellung
Intern ist jeder Befehl der Maschinensprache durch eine Zahl codiert; 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:
- Über einen Hex-Editor direkt den Zahlen-Code schreiben. (sehr kryptisch und unpraktisch)
- Mit einem Assembler: Assemblersprachen formulieren die Prozessorbefehle in einer einfachen, lesbaren Syntax. Dieser Quelltext wird danach vom Assembler, einem speziellen Compiler, in den Maschinencode konvertiert.
- Ein Programm wird in einer relativ abstrakten Hochsprache geschrieben, danach von einem Compiler in Maschinencode übersetzt (kompiliert).
- Alternativ können Programme in einer Hochsprache auch in einen Zwischencode übersetzt oder auch direkt durch einen Interpreter abgearbeitet werden.
Ein Beispiel hierfür ist Java (Programmiersprache), dessen Zwischencode (aka Bytecode) von einem Java Interpreter ausgeführt wird. Dies geschieht für den Benutzer z.B. transparent, wenn ein Java-Applet im Internet Browser ausgeführt wird.
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.
Verwandte Artikel
- Assembler (Die Artikel sollten aufeinander abgestimmt werden)
- Assemblersprache (Die Artikel sollten aufeinander abgestimmt werden)