Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

Opcode

Ein spezielles Programm, der Assembler, erzeugt Maschinencode, indem es im Wesentlichen die Mnemonics durch ihre jeweiligen Opcodes ersetzt. Die meisten …

Inhalt5 Abschnitte
  1. 1. Grundidee und Bedeutung
  2. 2. Mnemonics und Assemblersprache
  3. 3. Undefinierte Opcodes
  4. 4. Beispiel Z80
  5. 5. Beispiel Zuse Z3

Grundidee und Bedeutung

Ein Opcode, auch op code oder operation code, ist eine Zahl, die die Nummer eines Maschinenbefehls für einen bestimmten Prozessortyp angibt. Alle Opcodes zusammen bilden den Befehlssatz eines Prozessors oder einer Prozessorfamilie. Ein Maschinenbefehl ist eine Anweisung, die der Prozessor direkt ausführen kann, zum Beispiel Addition, Multiplikation, Kopieren von Registern, Laden und Speichern von Registerinhalten aus dem Arbeitsspeicher oder Ein- und Ausgabe.

Manche Opcodes bilden allein schon einen vollständigen Maschinenbefehl. Bei anderen müssen noch weitere Angaben folgen, etwa Adressen, Konstanten oder ähnliche Daten. Erst Opcode und Zusatzdaten zusammen ergeben dann den vollständigen Maschinenbefehl. Die meisten modernen Prozessoren besitzen einige hundert Opcodes.

Mnemonics und Assemblersprache

Jedem Opcode wird meist ein kurzes Wort oder eine Abkürzung zugeordnet. Diese lesbare Kurzform heißt Mnemonic. Mnemonics sind die Grundlage von Assemblersprachen: In einer Textdatei steht pro Zeile ein Mnemonic, gegebenenfalls gefolgt von Adressen oder Konstanten.

Ein spezielles Programm, der Assembler, erzeugt daraus Maschinencode. Dabei ersetzt er im Wesentlichen die Mnemonics durch die zugehörigen Opcodes. So können Menschen Programme in einer lesbareren Form schreiben, während der Prozessor am Ende die numerischen Maschinenbefehle erhält.

Undefinierte Opcodes

Ältere Prozessoren hatten oft „undefinierte“ oder „illegale“ Opcodes. Das waren Opcodes, die vom Hersteller nicht für die normale Programmierung vorgesehen waren. Wegen ihrer Nebenwirkungen auf den internen Schaltungsaufbau konnten sie seltsame, schädliche oder seltener auch nützliche Effekte auslösen.

Solche Opcodes wurden manchmal in Computerspielen auf Heimcomputern und frühen Spielkonsolen eingesetzt, etwa um bestimmte Vorgänge etwas schneller ablaufen zu lassen oder um Kopierschutzmechanismen schwerer durchschaubar zu machen. Der Nachteil war, dass diese Opcodes nicht garantiert waren und auf Nachfolgemodellen eines Prozessors oft nicht mehr funktionierten. Heutige Prozessoren reagieren auf unbekannte Opcodes meist entweder ohne Wirkung oder wechseln in einen klar definierten Fehlerzustand.

Beispiel Z80

Beim 8-Bit-Prozessor Z80 lassen sich Opcodes gut an einfachen Befehlen zeigen. Der Opcode 04 steht für das Mnemonic INC B und bedeutet: Register B wird um eins erhöht. Der Opcode 05 steht für DEC A und bedeutet: Register A wird um eins vermindert. Der Opcode 90 steht für SUB B und bedeutet: Register B wird vom Akkumulator A subtrahiert.

Ein Befehl kann auch zusätzliche Daten enthalten. Der Opcode 21 ll hh steht für LD HL,hhll und lädt das Registerpaar HL mit der Konstante hhll. Für den Z80 gibt es bei manchen Befehlen verschiedene Mnemonics, zum Beispiel LD M,B beziehungsweise LD (HL),B; für die Vorgänger-CPU Intel 8085 existiert zusätzlich MOV M,B.

Die Z80-Mnemonics DEC A, INC B, SUB B und LD HL,1234h erzeugen das Maschinenprogramm 05 04 90 21 34 12. Maschinenprogramme werden heute praktisch immer hexadezimal dargestellt. Selten werden sie dezimal oder oktal angegeben. Manchmal werden 16-Bit-Werte nicht als zwei 8-Bit-Worte in der Bytereihenfolge im Hauptspeicher gezeigt, sondern als ein 16-Bit-Wort in logischer Reihenfolge, also zum Beispiel 05 04 90 21 1234.

Beispiel Zuse Z3

Die Z3 von Konrad Zuse aus dem Jahr 1941 hatte zwei Register R1 und R2, 64 Speicherzellen und beherrschte Ein- und Ausgabe, die vier Grundrechenarten sowie die Wurzelberechnung von Gleitkommazahlen. Programme wurden auf Lochstreifen gespeichert. Die Opcodes der neun Befehle bestanden aus Lochstreifencodierungen.

Zu den Befehlen gehörten Lu für Anhalten und Eingabe einer Dezimalzahl von der Tastatur in R1, wobei R2 undefiniert wurde, sowie Ld für Anhalten und dezimale Anzeige des Ergebnisses. Speicherzugriffe waren Pr z zum Lesen der Speicherzelle z und Ps z zum Schreiben von R1 in Speicherzelle z. Rechenbefehle waren La für Addition R1:=R1+R2, Ls für Subtraktion R1:=R1-R2, Lm für Multiplikation R1:=R1*R2, Li für Division R1:=R1/R2 und Lw für Wurzelberechnung R1:=Wurzel(R1); bei diesen Rechenbefehlen wurde jeweils R2:=0 gesetzt.

In der Lochstreifencodierung steht O für Loch, - für kein Loch, · für das Transportloch und zzzzzz für eine binär codierte Speicherstelle von 0 bis 63. Der Lochstreifen ist 8 Bits breit und besitzt ein asymmetrisches Transportloch zwischen dem zweiten und dritten Bit. Die Opcodes für Speicherzugriffe belegen nur 2 Bits, gefolgt von der Adresse der Speicherzelle. Die anderen Opcodes belegen 5 Bits; 3 Bits sind unbenutzt.

Weiterlesen

Maschinensprache Mit einem Assembler: Assemblersprachen formulieren die Prozessorbefehle des Maschinencodes als Mnemonics in einer einfachen Syntax. Dieser Quelltext wird … Prozessor Aufbau und Funktionale Einheiten · Hauptprozessor (CPU) und Mehrprozessorkerne · Steuer- bzw. Leitwerk · Rechenwerk und Register · Datenleitungen · Caches und MMU. Befehlssatz Der Befehlssatz, auch Instruktionssatz (englisch instruction set), eines Prozessors ist in der Rechnerarchitektur die Menge der Maschinenbefehle, die ein … Befehl (Computer) Ein Befehl oder Kommando (von lateinisch commendare ‚befehlen') ist ein definierter Einzelschritt, der von einem Computer ausgeführt werden kann. Arbeitsspeicher Zugriffe auf den Arbeitsspeicher durch den Hauptprozessor werden zumeist über ein oder mehrere Pufferspeicher oder Cache-RAMs (kurz „Cache“) optimiert. Im Cache … Assemblersprache Eine Assemblersprache, kurz auch Assembler genannt (von englisch to assemble ‚zusammenfügen'), ist eine Programmiersprache, die auf den Befehlsvorrat eines … Assembler (Informatik) Ein Assembler (auch Assemblierer) ist ein Computerprogramm, das Quelltext in Maschinensprache übersetzt. Der Quelltext eines Assemblerprogramms ist in … Hexadezimalsystem Aussprache der Hexadezimalzahlen · 0x10 sprich: „eins-null“ (nicht: „zehn“), oder mit Kontext „hex eins-null“ · 0x1E sprich: „eins-E“, · 0xF112 sprich: „F-eins- … Oktalsystem Das Oktalsystem (von lateinisch octo ‚acht') ist ein Stellenwertsystem mit der Basis 8 (daher auch Achtersystem genannt). Es kennt acht Ziffern zur … Zuse Z3 Die Z3 war einer der ersten funktionsfähigen Digitalrechner weltweit und wurde am 12. Mai 1941 von Konrad Zuse in seiner Werkstatt in der Methfesselstraße 7 in … Konrad Zuse Konrad Ernst Otto Zuse (* 22. Juni 1910 in Deutsch-Wilmersdorf; † 18. Dezember 1995 in Hünfeld) war ein deutscher Bauingenieur, Erfinder und Unternehmer … Grundrechenart Von den vier Grundrechenarten werden in der Arithmetik die Addition und die Multiplikation als Grundoperationen und die Subtraktion und die Division als …