Maschinenbefehl: Aufbau und Ausführung erklärt
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.
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.
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.
Maschinenbefehl bedeutet eine Anweisung. Maschinencode bezeichnet meist eine Folge codierter Anweisungen.
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.
OpCode
Der Operationscode, kurz OpCode, legt fest, welche Operation die CPU ausführen soll, etwa Addieren oder Vergleichen.
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
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.
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.
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:
- Die CPU liest den nächsten Maschinenbefehl aus dem Speicher.
- Das Steuerwerk erkennt anhand des OpCodes die auszuführende Operation.
- Die CPU beschafft die benötigten Operanden aus Registern, dem Speicher oder dem Befehl selbst.
- Sie führt die Operation aus und speichert das Ergebnis.
- 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.
Betrachte diese didaktische, x86-artige Befehlsfolge mit dem Startwert EAX = 4:
ADD EAX, 3setztEAXauf7.CMP EAX, 7vergleicht den Registerwert mit7, ohneEAXzu verändern. Das Zero-Flag wird gesetzt.- 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.
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.
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.
Die Bits sind gleich – ihre Bedeutung hängt von Architektur, Befehl und Dateninterpretation ab.
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.
| Ausgang | Werkzeug | Ergebnis |
|---|---|---|
| Hochsprache, zum Beispiel C | Compiler | Maschinenbefehle oder weitere Zwischenstufen |
| Assemblersprache | Assembler | Maschinencode |
| Maschinencode | Disassembler | lesbare 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.
Karteikasten
Überlege zuerst selbst und drehe die Karte anschließend zum Prüfen um.
Alles auf einen Blick
- 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
- Aufbau
Abschluss-Check
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.
Mit Google fortfahren