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.
- 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.
Assemblersprache
Eine Assemblersprache ist eine maschinennahe Programmiersprache. Ihre Befehle entsprechen meist direkt Befehlen einer bestimmten Prozessorarchitektur.
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.
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.
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.
Mnemonic
Ein Mnemonic ist ein gut merkbares Befehlswort in Assemblersprache, zum Beispiel MOV für Kopieren oder ADD für Addieren.
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.
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.
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.
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.
Register
Ein Register ist ein kleiner Speicherplatz direkt im Prozessor. Register werden für Rechenwerte, Adressen, Zähler oder besondere Steuerinformationen genutzt.
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.
Rechne c = a + b auf einer einfachen Registermaschine:
MOV R1, [a]lädt den Wert aus Speicherstelleain RegisterR1.ADD R1, [b]addiert den Wert aus SpeicherstellebzuR1.MOV [c], R1speichert das Ergebnis ausR1nachc.
Die eckigen Klammern bedeuten hier vereinfacht: Greife auf den Speicherinhalt an dieser Adresse zu.
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.
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.
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.
Vereinfachter Schleifencode:
MOV A, 5
MOV B, 7
MOV C, 0
Loop: ADD C, A
DEC B
JNZ Loop
Bedeutung:
Aenthält 5.Bzählt von 7 herunter.Cstartet bei 0.- Solange
Bnach dem Verringern nicht 0 ist, wird wieder zuLoopgesprungen. - Dadurch wird 7-mal die 5 addiert.
Am Ende steht in C der Wert 35.
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.
Prozessorarchitektur
Eine Prozessorarchitektur beschreibt unter anderem den Befehlssatz, Register, Datenformate und grundlegende Arbeitsweise eines Prozessors.
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.
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.
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.
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.
Mit Google fortfahren