‹ Informatik

Assembler

Assembler verständlich erklärt: Aufbau, Funktion und typische Beispiele aus Prozessoren, Speicher und Computerarchitektur.

Wenn ein Programm läuft, führt der Prozessor am Ende sehr einfache Maschinenbefehle aus. Assembler liegt ganz nah an dieser Ebene: Menschen schreiben noch lesbare Kürzel, der Assembler übersetzt sie in Maschinencode. Nach dieser Erklärung kannst du Assemblersprache, Assembler, Register und einfache Befehle auseinanderhalten.

Deine Lernziele
  • Ich kann erklären, was Assemblersprache ist.
  • Ich kann den Unterschied zwischen Assemblersprache und Assembler benennen.
  • Ich kann Register, Speicher, Mnemonics und Maschinencode einordnen.
  • Ich kann einfache Assemblerbefehle wie `MOV`, `ADD` und Sprünge lesen.
  • Ich kann erklären, warum Assembler architekturabhängig ist.

Nah am Prozessor

Hochsprachen wie Python oder Java verstecken viele Details. Assembler zeigt mehr davon: Register, Speicheradressen, Sprünge und konkrete Prozessorbefehle.

Definition

Assemblersprache

Eine Assemblersprache ist eine maschinennahe Programmiersprache. Ihre Befehle entsprechen meist direkt Befehlen einer bestimmten Prozessorarchitektur.

Definition

Assembler

Ein Assembler ist ein Übersetzungsprogramm. Es übersetzt Quelltext in Assemblersprache in Maschinencode.

Im Alltag wird "Assembler" oft für beides verwendet: die Sprache und das Übersetzungsprogramm. In Prüfungen ist die Unterscheidung hilfreich: Die Sprache enthält Befehle wie MOV; das Programm übersetzt sie in Bytes.

Beispiel

Eine Hochsprache könnte schreiben:

summe = a + b

In Assemblersprache muss das näher an den Prozessor zerlegt werden:

MOV R1, a

ADD R1, b

MOV summe, R1

Die genauen Befehle hängen vom Prozessor und vom Assembler-Dialekt ab. Die Idee bleibt: Daten laden, rechnen, Ergebnis speichern.

Merke

Assemblersprache ist für Menschen lesbarer als Maschinencode, bleibt aber eng an die Befehle einer bestimmten CPU gebunden.

Interaktive Quizfrage wird geladen ...

Mnemonics, Opcodes und Maschinencode

Der Prozessor versteht keine Wörter wie ADD. Er versteht Bitmuster. Assemblersprache nutzt kurze Merkwörter, sogenannte Mnemonics, damit Menschen nicht direkt Nullen und Einsen schreiben müssen.

Definition

Mnemonic

Ein Mnemonic ist ein gut merkbares Befehlswort in Assemblersprache, zum Beispiel MOV für Kopieren oder ADD für Addieren.

Definition

Opcode

Ein Opcode ist der Teil eines Maschinenbefehls, der die auszuführende Operation angibt. Er sagt dem Prozessor zum Beispiel, ob addiert, kopiert oder gesprungen werden soll.

Definition

Maschinencode

Maschinencode besteht aus den binären Befehlen, die ein Prozessor direkt ausführen kann.

Der Assembler ersetzt Mnemonics durch passende Opcodes und codiert Operanden wie Register, Konstanten oder Speicheradressen.

Beispiel

Vereinfachtes Beispiel:

ADD R1, 5

Bedeutung:

  • ADD: Operation ist Addition.
  • R1: Zielregister oder beteiligtes Register.
  • 5: unmittelbarer Zahlenwert.

Der Assembler macht daraus einen Maschinenbefehl. In echten Prozessoren steckt darin unter anderem ein Opcode für ADD und eine Codierung für Register und Wert.

Gut zu wissen

Ein Assemblerbefehl entspricht oft ungefähr einem Maschinenbefehl. Das ist aber eine Vereinfachung: Makros, Pseudobefehle und verschiedene Adressierungsarten können die Übersetzung erweitern.

Interaktiver Lückentext wird geladen ...

Register und Speicher

Assemblerprogramme arbeiten oft direkt mit Registern. Register sind sehr kleine, sehr schnelle Speicherplätze im Prozessor.

Definition

Register

Ein Register ist ein kleiner Speicherplatz direkt im Prozessor. Register werden für Rechenwerte, Adressen, Zähler oder besondere Steuerinformationen genutzt.

Definition

Speicheradresse

Eine Speicheradresse bezeichnet eine Stelle im Hauptspeicher. Über Adressen kann ein Programm Daten aus dem Speicher lesen oder dorthin schreiben.

Viele Prozessorbefehle arbeiten nicht beliebig mit großen Datenstrukturen, sondern mit wenigen Operanden. Darum sieht Assemblercode oft kleinschrittig aus: laden, verändern, speichern.

Beispiel

Rechne c = a + b auf einer einfachen Registermaschine:

  1. MOV R1, [a] lädt den Wert aus Speicherstelle a in Register R1.
  2. ADD R1, [b] addiert den Wert aus Speicherstelle b zu R1.
  3. MOV [c], R1 speichert das Ergebnis aus R1 nach c.

Die eckigen Klammern bedeuten hier vereinfacht: Greife auf den Speicherinhalt an dieser Adresse zu.

Merke

In Assembler denkst du oft in kleinen Bewegungen: Wert aus Speicher in Register, Operation im Register, Ergebnis zurück in den Speicher.

Interaktive Quizfrage wird geladen ...

Sprünge und Schleifen

Hochsprachen haben if, while oder for. In Assembler werden solche Strukturen oft aus Vergleichen und Sprüngen gebaut.

Definition

Sprungbefehl

Ein Sprungbefehl verändert, welcher Befehl als Nächstes ausgeführt wird. Er kann unbedingt oder abhängig von einer Bedingung ausgeführt werden.

Definition

Label

Ein Label ist eine symbolische Markierung im Assemblercode. Sprungbefehle können zu einem Label springen.

Ein bedingter Sprung prüft häufig Flags, die durch einen vorherigen Vergleich oder eine Rechenoperation gesetzt wurden. So entstehen Verzweigungen und Schleifen.

Beispiel

Vereinfachter Schleifencode:

MOV A, 5

MOV B, 7

MOV C, 0

Loop: ADD C, A

DEC B

JNZ Loop

Bedeutung:

  1. A enthält 5.
  2. B zählt von 7 herunter.
  3. C startet bei 0.
  4. Solange B nach dem Verringern nicht 0 ist, wird wieder zu Loop gesprungen.
  5. Dadurch wird 7-mal die 5 addiert.

Am Ende steht in C der Wert 35.

Gut zu wissen

Solche Beispiele zeigen, warum Assembler leicht fehleranfällig sein kann. Eine Schleife besteht nicht aus einem einzigen bequemen for, sondern aus Zähler, Label, Änderung und Sprungbedingung.

Interaktive Quizfrage wird geladen ...

Architekturabhängigkeit

Assemblersprache ist nicht universell wie viele Hochsprachen. Ein Befehlssatz gehört zu einer Prozessorarchitektur. Darum kann Assemblercode für einen Prozessor auf einem anderen Prozessor nicht einfach unverändert laufen.

Definition

Prozessorarchitektur

Eine Prozessorarchitektur beschreibt unter anderem den Befehlssatz, Register, Datenformate und grundlegende Arbeitsweise eines Prozessors.

Definition

Befehlssatz

Der Befehlssatz ist die Menge der Maschinenbefehle, die ein Prozessor versteht.

Ein x86-Prozessor, ein ARM-Prozessor und ein MIPS-Prozessor haben unterschiedliche Register, Befehle und Codierungen. Selbst bei derselben Architektur können verschiedene Assembler-Dialekte anders aussehen.

Beispiel

Die Operation "kopiere einen Wert" kann je nach Dialekt unterschiedlich geschrieben werden:

  • Intel-nahe Schreibweise: mov eax, 5
  • Andere Syntaxvarianten können Reihenfolge, Präfixe oder Registerschreibweise anders behandeln.

Wichtig ist: Du lernst in Assembler nicht nur eine allgemeine Idee, sondern immer auch Regeln einer konkreten Zielarchitektur.

Merke

Assembler ist mächtig, aber wenig portabel. Was sehr genau zur einen CPU passt, passt nicht automatisch zur nächsten.

Prüfungsmodus

In Aufgaben musst du Assemblercode oft nicht selbst perfekt schreiben, sondern lesen. Markiere zuerst Registerbelegungen, dann jede Änderung, dann Sprünge.

Beispiel

Lesestrategie für die Schleife:

MOV B, 3

MOV C, 0

Loop: ADD C, 2

DEC B

JNZ Loop

Tabelle:

Durchlauf C nach ADD B nach DEC Sprung?
1 2 2 ja
2 4 1 ja
3 6 0 nein

Am Ende ist C = 6.

Interaktive Quizfrage wird geladen ...

Alles auf einen Blick

Interaktive Mindmap wird geladen ...

Interaktive Lernkarten wird geladen ...

Abschluss-Check

Interaktive Quizfrage wird geladen ...

Zusammenfassung

Assemblersprache ist eine maschinennahe Sprache. Sie verwendet lesbare Mnemonics, die ein Assembler in Maschinencode übersetzt.

Assemblerprogramme arbeiten nah an Registern, Speicheradressen, Opcodes und Sprüngen. Dadurch bekommt man viel Kontrolle, muss aber viele Details selbst beachten.

Assembler ist architekturabhängig. Er wird heute vor allem genutzt, wenn Hardwarezugriff, sehr kleine Programme oder besondere Optimierung wichtig sind.