Opcode

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springenZur Suche springen

EinOpcode, auchop code oderoperation code, ist eine Zahl, die die Nummer einesMaschinenbefehls für einen bestimmtenProzessortyp angibt. Alle Opcodes zusammen bilden denBefehlssatz des Prozessors oder der Prozessorfamilie. Jeder Befehl hat einen eigenen Opcode, etwa die Addition, Multiplikation, das Kopieren vonRegistern, Laden und Speichern von Registern aus demArbeitsspeicher, Ein- und Ausgabe usw. Einfache Opcodes stellen bereits einen Maschinenbefehl dar. Auf einen Teil der Opcodes müssen Adressen, Konstanten oder Ähnliches folgen, die dann zusammen mit dem Opcode einen Maschinenbefehl bilden.

Jedem Opcode wird ein kurzes Wort oder eine Abkürzung, einMnemonic, zugeordnet. Mit den Mnemonics ergeben sich dieAssemblersprachen, bei denen jeweils ein Mnemonic, gegebenenfalls gefolgt von Adressen oder Konstanten, in eine Zeile einer Textdatei geschrieben wird. Ein spezielles Programm, derAssembler, erzeugt Maschinencode, indem es im Wesentlichen die Mnemonics durch ihre jeweiligen Opcodes ersetzt.

Die meisten modernen Prozessoren besitzen einige hundert Opcodes.

Ältere Prozessoren hatten oft „undefinierte“ oder „illegale“ Opcodes. Bestimmte, für die Programmierung gar nicht vorgesehene Opcodes konnten durch ihre Nebenwirkungen auf den internen Schaltungsaufbau des Prozessors allerhand seltsame, schädliche oder seltener auch nützliche Effekte haben. Solche Opcodes wurden manchmal bei der Programmierung vonComputerspielen aufHeimcomputern und frühenSpielkonsolen benutzt, um bestimmte Vorgänge ein wenig schneller ablaufen zu lassen oder um die Funktionsweise einesKopierschutzes zu verschleiern. Nachteilig war, dass solche „undefinierten Opcodes“ vom Hersteller nicht garantiert wurden und auf Nachfolgemodellen eines Prozessors oft nicht mehr funktionierten. Heutige Prozessoren tun dagegen entweder überhaupt nichts, wenn sie in einem Programm einen unbekannten Opcode antreffen, oder aber sie begeben sich in einen klar definierten Fehlerzustand.

Der 8-Bit-Prozessor Z80

[Bearbeiten |Quelltext bearbeiten]
Opcode
in hex
MnemonicBeschreibung
04INC Berhöhe Register B um eins (engl.incrementB)
05DEC Avermindere Register A um eins (engl.decrementA)
90SUB Bsubtrahiere RegisterB von Akkumulator A
21 ll hhLD HL,hhllload HL mit der Konstante hhll
weitere Befehle

Bemerkung: Für denZ80 gibt es zwei verschiedene Mnemonics (LD M,B bzw. LD (HL),B), hinzu kommt eine dritte für die Vorgänger-CPU Intel 8085 (MOV M,B).

Folgende Z80-Mnemonics

 DEC A INC B SUB B LD HL,1234h

erzeugen folgendes Z80-Maschinenprogramm

 05 04 90 21 34 12

Maschinenprogramme werden heutzutage praktisch immerhexadezimal dargestellt (seltene Alternativen: dezimal,oktal). Manchmal werden 16-Bit-Werte nicht als zwei 8-Bit-Worte in der Bytereihenfolge im Hauptspeicher, sondern als ein 16-Bit-Wort in der logischen Reihenfolge angezeigt:

 05 04 90 21 1234

Der Relaisrechner Zuse Z3

[Bearbeiten |Quelltext bearbeiten]

DieZ3 vonKonrad Zuse aus dem Jahre1941 hatte zwei Register R1 und R2, 64 Speicherzellen und beherrschte die Ein-/Ausgabe, die vierGrundrechenarten und dieWurzelberechnung von Gleitkommazahlen. Programme wurden aufLochstreifen abgelegt, die Opcodes der neun Befehle bestanden aus den folgenden Lochstreifencodierungen:

Opcode
auf dem
Lochstreifen
MnemonicBeschreibung
-O·OO----LuAnhalten, Eingabe R1 einer Dezimalzahl von der Tastatur, R2:=undef
-O·OOO---LdAnhalten, dezimale Anzeige des Ergebnisses
OO·zzzzzzPr zLesen der Speicherzellez (erst R1, danach immer R2)
O-·zzzzzzPs zSchreiben von R1 in Speicherzellez
-O·O-----LaAddition R1:=R1+R2, R2:=0
-O·O-O---LsSubtraktion R1:=R1-R2, R2:=0
-O·--O---LmMultiplikation R1:=R1*R2, R2:=0
-O·-O----LiDivision R1:=R1/R2, R2:=0
-O·-OO---LwWurzelberechnung R1:=Wurzel(R1), R2:=0

O : Loch, - : kein Loch, · : Transportloch, zzzzzz : binär codierte Speicherstelle 0…63

Der Lochstreifen ist 8 Bits breit und weist ein asymmetrisches Transportloch zwischen dem zweiten und dritten Bit auf. Die Opcodes für die Speicherzugriffe belegen nur 2 Bits, gefolgt von der Adresse der Speicherzelle. Die anderen Opcodes belegen 5 Bits, 3 Bits sind unbenutzt.

Weblinks

[Bearbeiten |Quelltext bearbeiten]
  • RAÚL ROJAS:Konrad Zuse’s Legacy: The Architecture of the Z1 and Z3. In:IEEE Annals of the History of Computing. Vol. 19,Nr. 2, 1997,S. 5–16 (englisch,ed-thelen.org [PDF;305 kB; abgerufen am 11. Oktober 2018]). 
Abgerufen von „https://de.wikipedia.org/w/index.php?title=Opcode&oldid=245719984
Kategorien: