Zum Inhalt springen

Maschinensprache

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 16. März 2005 um 01:55 Uhr durch Mkleine (Diskussion | Beiträge) (Abgrenzung der Verwendung des Begriffes Befehlssatz, die Begriffe sind allerdings im Kern synonym). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Unter Maschinensprache (auch Maschinencode) versteht man den Befehlssatz eines Mikroprozessors, gleichsam 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 so genannten Maschinensprachemonitor bearbeitet werden kann. Will man die Menge aller Befehle eines Prozessors beschreiben, so wird der Begriff Befehlssatz bevorzugt. Von Maschinensprache spricht man eher dann, wenn man ein konkretes, in Maschinensprache vorliegendes Programm analysiert oder wenn man den Befehlssatz (etwas vergleichend) auf seine sprachlichen Eigenschaften hin analysiert.

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 Intel-Mikroprozessor-Architektur einen sehr großen Marktanteil hat (auch andere Firmen wie AMD benutzen sie), und die IBM-Architektur den Mainframebereich 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. 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:

  • Arithmetische Operationen: Führen Berechnungen durch
  • Speicheroperationen: Übertragen Daten zwischen Prozessor und Speicher
  • Vergleichesoperationen: Vergleich von Werten
  • Steueroperationen: Verzweigungen, die den Ablauf des Programms beeinflussen

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 codiert. Diese Zahlenwerte bestehen aus dem Opcode, der die Art des Befehls festlegt, eventuell gefolgt von mehrere 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:

  • Direkte Eingabe der Binärcodes über eine Reihe von Schaltern (äußerst kryptisch und unpraktisch, seit den 1970er Jahren völlig außer Gebrauch gekommen)
  • Über einen Hex-Editor den Zahlen-Code in Hexadezimalzahlen schreiben. (immer noch 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 -- nach Übersetzung in einen Zwischencode oder auch direkt -- durch einen Interpreter abgearbeitet werden.

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.

Verwandte Artikel

Assembler (Die Artikel sollten aufeinander abgestimmt werden)
Assemblersprache (Die Artikel sollten aufeinander abgestimmt werden)
CISC
Reduced Instruction Set Computing