Informatik

Maschinenbefehl: Aufbau und Ausführung erklärt

Maschinenbefehl: Aufbau und Ausführung erklärt
Maschinenbefehl: Aufbau und Ausführung erklärt
Für Quiz, Lückentext, Lernkarten und Fortschritt ist JavaScript nötig. Alle Inhalte und Lösungen bleiben direkt lesbar.

Ein Maschinenbefehl ist eine codierte Anweisung, die ein bestimmter Prozessor unmittelbar ausführen kann. Der Befehl legt eine Operation fest, zum Beispiel Addieren, Vergleichen, Kopieren oder Springen.

Du lernst, einen Maschinenbefehl in Operation und Operanden zu zerlegen, seine Ausführung zu verfolgen und ihn von Maschinencode sowie Assemblersprache abzugrenzen.

Deine Lernziele

Hake ab, was du schon kannst — und komm am Ende hierher zurück!

Was ist ein Maschinenbefehl?

Ein Prozessor beherrscht nur die Befehle seines Befehlssatzes. Darin ist festgelegt, welche Operationen verfügbar sind und wie sie codiert werden.

Definition

Maschinenbefehl

Ein Maschinenbefehl ist eine einzelne, numerisch codierte Anweisung für einen Prozessor. Er bestimmt eine Operation und enthält je nach Befehlsformat Angaben zu den benötigten Werten oder Speicherstellen.

Typische Befehlsgruppen sind:

  • Arithmetik: Werte addieren, subtrahieren, multiplizieren oder dividieren
  • Datentransfer: Daten zwischen Registern und Speicher übertragen
  • Logik und Bitoperationen: Bits verknüpfen, prüfen oder verschieben
  • Vergleich: Werte vergleichen und dabei Zustandsmerkmale setzen
  • Ablaufsteuerung: zu einem anderen Befehl springen oder eine Schleife steuern

Ein einzelner Maschinenbefehl ist noch kein Programm. Eine sinnvoll geordnete Folge ausführbarer Maschinenbefehle heißt Maschinencode oder Maschinenprogramm.

Merke

Maschinenbefehl bedeutet eine Anweisung. Maschinencode bezeichnet meist eine Folge codierter Anweisungen.

Teste dich
Frage 1 von 1LeichtWelche Aussage beschreibt einen Maschinenbefehl richtig?
Lösung: Er ist eine einzelne codierte Anweisung, die ein passender Prozessor ausführen kann. — Der Maschinenbefehl ist die einzelne ausführbare Anweisung. Erst eine geordnete Befehlsfolge bildet ein Maschinenprogramm.
Wie ist ein Maschinenbefehl aufgebaut?

Der genaue Aufbau hängt von der Prozessorarchitektur ab. Typischerweise enthält ein Befehl mindestens einen OpCode. Weitere Felder können Operanden oder Angaben zu ihrer Adressierung enthalten.

Definition

OpCode

Der Operationscode, kurz OpCode, legt fest, welche Operation die CPU ausführen soll, etwa Addieren oder Vergleichen.

Definition

Operand

Ein Operand bezeichnet einen Wert oder den Ort eines Werts. Das kann zum Beispiel ein Register, eine Speicherstelle oder eine unmittelbar im Befehl enthaltene Zahl sein.

In einer x86-artigen Assemblerdarstellung folgt ein Befehl häufig diesem Muster:

Operation Ziel, Quelle

Beispiel

Beim Befehl ADD EAX, ECX ist ADD die Operation. EAX ist das Zielregister und ECX das Quellregister.

Die Wirkung lautet vereinfacht:

EAX = EAX + ECX

Steht vorher EAX = 2 und ECX = 3, steht danach EAX = 5. ECX bleibt unverändert.

Die lesbare Schreibweise ist noch nicht der eigentliche Maschinenbefehl. Der konkrete Zahlencode hängt außer von der Operation auch von den Operanden und ihrer Breite ab. Ein 8-Bit-Register kann deshalb zu einer anderen Codierung führen als ein 32-Bit-Register.

Lückentext

Wähle in jeder Lücke die passende Form und prüfe anschließend deine Antworten.

Der bestimmt die Operation. Ein Register oder eine Speicherstelle kann als dienen. Beim Muster Operation Ziel, Quelle wird das Ergebnis gewöhnlich im abgelegt. Die konkrete Codierung hängt von der ab.

Lösungen: Lücke 1: OpCode; Lücke 2: Operand; Lücke 3: Ziel; Lücke 4: Prozessorarchitektur. OpCode und Operanden bilden die wesentlichen Teile eines Maschinenbefehls. Ihre genaue Codierung legt die jeweilige Prozessorarchitektur fest.
Wie führt die CPU einen Befehl aus?

Vor der Ausführung wird ein Maschinenprogramm in den Hauptspeicher geladen. Ein Befehlszähler hält fest, an welcher Stelle der nächste Befehl steht.

Vereinfacht läuft die Verarbeitung so ab:

  1. Die CPU liest den nächsten Maschinenbefehl aus dem Speicher.
  2. Das Steuerwerk erkennt anhand des OpCodes die auszuführende Operation.
  3. Die CPU beschafft die benötigten Operanden aus Registern, dem Speicher oder dem Befehl selbst.
  4. Sie führt die Operation aus und speichert das Ergebnis.
  5. Der Befehlszähler zeigt anschließend auf den folgenden Befehl – außer ein Sprung verändert ihn.

Register sind kleine, direkt im Prozessor verfügbare Speicherplätze. Viele Befehle lesen Werte aus Registern oder schreiben Ergebnisse hinein.

Ein Flagregister hält Zusatzinformationen über ein Ergebnis fest. Das Zero-Flag zeigt beispielsweise ein Ergebnis von null an. Carry kann eine Bereichsüberschreitung bei vorzeichenlosen Zahlen anzeigen, Overflow eine Überschreitung bei vorzeichenbehafteter Arithmetik.

Beispiel

Betrachte diese didaktische, x86-artige Befehlsfolge mit dem Startwert EAX = 4:

  1. ADD EAX, 3 setzt EAX auf 7.
  2. CMP EAX, 7 vergleicht den Registerwert mit 7, ohne EAX zu verändern. Das Zero-Flag wird gesetzt.
  3. Ein anschließender Sprung bei Gleichheit kann dieses Flag auswerten und zu einem markierten Programmabschnitt wechseln.

Der Vergleich und der Sprung arbeiten zusammen: CMP erzeugt die Zustandsinformation, der bedingte Sprung wertet sie aus.

Teste dich
Frage 1 von 2MittelNach ADD EAX, ECX stehen EAX = 6 und ECX = 2. Welche Werte gelten danach?
Lösung: EAX = 8 und ECX = 2ADD EAX, ECX bedeutet hier EAX = EAX + ECX. Das Quellregister ECX wird nicht verändert.
Frage 2 von 2SchwerWarum kann nach einem Vergleich ein bedingter Sprung folgen?
Lösung: Der Vergleich setzt Flags, die der Sprung als Bedingung auswertet. — Vergleichsbefehle stellen Zustandsinformationen bereit. Bedingte Sprünge entscheiden anhand dieser Informationen über den weiteren Ablauf.
Warum sind Maschinenbefehle prozessorabhängig?

CPU-Hersteller beziehungsweise Befehlssatzarchitekturen legen fest, welche Befehle existieren, wie sie codiert sind und welche Register verwendet werden. Maschinencode für eine Architektur läuft deshalb nur auf einer passenden oder kompatiblen Prozessorfamilie.

Auch Befehlsformate unterscheiden sich. Ein Befehl kann je nach Architektur eine feste oder variable Länge besitzen. Ebenso unterscheiden sich Registernamen, Operandengrößen und Möglichkeiten der Speicheradressierung.

Gut zu wissen

Ein Bitmuster erklärt sich nicht von selbst. Seine Bedeutung ergibt sich aus dem Befehl, dem Datenformat und der Architektur. Dasselbe Muster kann beispielsweise als vorzeichenlose Zahl oder als Zahl im Zweierkomplement interpretiert werden.

Ein 8-Bit-Register kann nur 256 verschiedene Bitmuster speichern. Bei der vorzeichenlosen Rechnung 253 + 255 = 508 bleiben in einem 8-Bit-Ergebnis nur die unteren 8 Bit erhalten. Das entspricht 252; ein gesetztes Carry-Flag zeigt den fehlenden Übertrag an.

Bei einer vorzeichenbehafteten Rechnung muss stattdessen das Overflow-Flag passend interpretiert werden. Die CPU führt die Bitoperation aus; das Programm muss wissen, welche Zahlenart gemeint ist.

Merke

Die Bits sind gleich – ihre Bedeutung hängt von Architektur, Befehl und Dateninterpretation ab.

Teste dich
Frage 1 von 1MittelWarum reicht bei einer Addition nicht immer der gespeicherte Registerwert aus?
Lösung: Ein Flag kann anzeigen, dass das Ergebnis nicht vollständig in die vorgesehene Bitbreite passt. — Bei begrenzter Registerbreite können höherwertige Bits verloren gehen. Carry oder Overflow helfen, diesen Fall passend zur Zahleninterpretation zu erkennen.
Wie entstehen Maschinenbefehle aus Programmtext?

Menschen schreiben größere Programme gewöhnlich nicht als Folgen von Nullen und Einsen. Sie nutzen lesbarere Sprachebenen und Übersetzungswerkzeuge.

AusgangWerkzeugErgebnis
Hochsprache, zum Beispiel CCompilerMaschinenbefehle oder weitere Zwischenstufen
AssemblerspracheAssemblerMaschinencode
MaschinencodeDisassemblerlesbare Assemblerdarstellung

Assemblersprache verwendet Mnemoniken, also kurze Namen wie ADD, MOV oder JMP. Sie stehen für Operationen des Prozessors. Symbolische Labels können Sprungziele bezeichnen, ohne dass Programmierende deren numerische Adressen von Hand eintragen müssen.

Ein Assembler ersetzt diese lesbaren Darstellungen durch passende Zahlencodes. Makros können allerdings mehrere Maschinenbefehle erzeugen. Deshalb darfst du nicht jede beliebige Assemblerzeile mit genau einem Maschinenbefehl gleichsetzen.

Hochsprachen arbeiten auf einer abstrakteren Ebene. Eine einzelne Hochsprachenanweisung kann viele Maschinenbefehle erfordern. Ein Compiler kann außerdem Befehle auswählen und anordnen, um das Programm für eine Zielarchitektur zu übersetzen.

Teste dich
Frage 1 von 2LeichtWelches Werkzeug übersetzt Assemblersprache in Maschinencode?
Lösung: Assembler — Der Assembler erzeugt aus Mnemoniken, Operanden und Labels den passenden Maschinencode.
Frage 2 von 2MittelWarum ist Assemblersprache für Menschen meist leichter lesbar als Maschinencode?
Lösung: Sie verwendet Mnemoniken und symbolische Namen anstelle reiner Zahlencodes. — Mnemoniken wie ADD beschreiben Operationen lesbar. Vor der Ausführung muss ein Assembler daraus jedoch Maschinencode erzeugen.
Karteikasten
Karteikasten

Überlege zuerst selbst und drehe die Karte anschließend zum Prüfen um.

Alles auf einen Blick
Mindmap
  • Maschinenbefehl
    • Aufbau
      • OpCode
      • Operanden
    • Ausführung
      • Register
      • Befehlszähler
      • Flags
    • Befehlsarten
      • Rechnen und Logik
      • Datentransfer
      • Vergleich und Sprung
    • Darstellung und Übersetzung
      • Assemblersprache und Assembler
      • Hochsprache und Compiler
    • Gültigkeit
      • architekturabhängiger Befehlssatz
Abschluss-Check
Teste dich
Frage 1 von 3LeichtWas unterscheidet einen Maschinenbefehl von Maschinencode?
Lösung: Ein Maschinenbefehl ist eine einzelne Anweisung; Maschinencode besteht gewöhnlich aus einer Befehlsfolge. — Ein Programm in Maschinensprache enthält viele einzelne Maschinenbefehle in einer sinnvollen Reihenfolge.
Frage 2 von 3MittelEin Befehl lautet in einer x86-artigen Darstellung SUB EAX, ECX. Was geschieht vereinfacht?
Lösung: Der Wert aus ECX wird von EAX abgezogen und das Ergebnis in EAX gespeichert. — SUB Ziel, Quelle bedeutet in dieser Darstellung Ziel = Ziel - Quelle.
Frage 3 von 3SchwerEin Programm liegt nur als Maschinencode für eine bestimmte Prozessorarchitektur vor. Warum läuft es nicht automatisch auf jeder anderen CPU?
Lösung: Befehlssätze und Codierungen sind architekturabhängig; die andere CPU kann die Codes anders oder gar nicht deuten. — Der OpCode erhält seine Bedeutung durch den Befehlssatz der Zielarchitektur. Nur eine passende oder kompatible CPU kann den Code unmittelbar ausführen.

Du kannst einen Maschinenbefehl jetzt als Verbindung von Operation, Operanden und architekturabhängiger Codierung erklären. Beim Verfolgen einer Befehlsfolge achtest du besonders auf Zielregister, Befehlszähler und Flags.

Passend dazu