Schlagworte

Maschinencode

Kodierung von Maschinenbefehlen durch einen Bytewert oder die Kombination mehrerer Bytewerte (Opcode). Die CPU kann diese Befehle direkt ausführen.

Ãœbliche Befehle sind das Laden, Speichern, Addieren und Multiplizieren von Datenregistern und Speicherzellen. Berechnungen erfolgen in der Regel nur mit den Datenregistern oder einem Akkumulator.

Um sich nicht die einzelnen Bytewerte bzw. Opcodes merken zu müssen, verwendet man für jeden Befehl eine spezielle Abkürzung, die sogenannten Mnemonics.

Ein spezielles Programm, der Assembler, übersetzt die Mnemonics in die entsprechenden Bytekombinationen des Maschinencodes.

Ein Beispiel für den 6502C 8-Bit Prozessor, der im Commodore C64 und Atari 800 XL zum Einsatz kam:

Eine 8-Bit Addition des Akkumulators mit der 8-Bit Zahl 10 wird im Immediate Mode mit dem Mnemonic ADC beschrieben:

ADC #10

Ãœbersetzt in Opcode ergibt dies die hexadezimalen Bytewerte:

69 0A

Laden des Akkumulators mit dem 8-Bit Wert abgelegt an der 16-Bit Adresse A0FF im Absolute Mode:

LDA A0FF
AD A0 FF

Sprung um 7 Bytes nach vorne wenn Akkumulatorinhalt nicht gleich 0 im Relative Mode:

BNE 07
D0 07

Der Assembler erleichtert einem ausserdem die Arbeit, indem man Sprungadressen (und Speicheradressen) durch Labels ausdrücken kann:

         LDA x
         SBC #1
         BNE label1
         <statement1>
         JMP label2;
label1:  <statement2>
label2:

Dies entspricht dem C-Konstrukt if (x==1) statement1; else statement2;

Heutzutage rechnen die CPUs natürlich nicht mehr nur mit 8 Bit sondern im Allgemeinen mit 32 Bit. Die absolute Adressierung erfolgt entweder mit 32 oder 64 Bit, die relative mit 16 Bit.

Die Mnemonics und Opcodes unterscheiden sich natürlich von CPU zu CPU, im folgenden sollen jedoch einige gängige Schreibweisen wiedergegeben werden:

MOV Rx,y     = Laden von Inhalt der Speicheradresse y nach Register Rx
MOV x,Ry     = Speichern von Register Ry nach Speicheradresse x
ADD Rx,Ry,Rz = Addition des Inhalts von Register Ry und Rz und Speichern des Ergebnisses in Rx
SUB Rx,Ry,Rz = Subtraktion des Inhalts von Register Ry und Rz und Speichern in Rx
MUL Rx,Ry,Rz = Multipliaktion von Ry und Rz und Speichern in Rx
JMP a        = Verzweigung an die Adresse a
JNZ Rx,a     = Verzweigung an die Adresse a wenn Rx ungleich 0

Options: