Bunte Bits

4. Halbleiter und richtige Computer


4.5 Befehle

Welche Befehle müssen in so einer CPU noch verdrahtet werden? Kopieren muss die CPU können, haben wir gesehen. Was noch?

Um einen leistungsfähigen Computer zu erhalten, ist es wichtig, den Befehlssatz, den der Prozessor bereitstellt, möglichst geschickt so anzulegen, dass die Befehle möglichst einfach verdrahtet werden können, dass sie möglichst schnell, das heißt in möglichst wenigen Takten abgearbeitet sind, und dass man möglichst gut jede denkbare komplexe Aufgabe in diese Befehle zerlegen kann.

Es gab mal eine Zeit, da hat man Prozessoren gebaut, die hatten einen besonders kleinen Befehlsvorrat! Dadurch konnte man den Computer so viel schneller machen, dass der zusätzliche Aufwand dadurch, dass man die komplexen Aufgaben in noch mehr kleine Aufgaben zerlegen musste, mehr als ausgeglichen wurde. Solche Prozessoren hießen RISC, was ein Akronym ist und als englisches Wort "Risiko" bedeutet; ausgeschrieben heißt es Reduced Instruction Set Computer und bedeutet Computer mit reduziertem Befehlsvorrat.

Manche Befehle, die man in einem Prozessor-Befehlssatz findet, wundern einen, und man fragt sich wofür man die wohl brauchen kann. Man muss sich aber eigentlich keine weiteren Gedanken darüber machen, denn wie du im Kapitel 9 noch sehen wirst, braucht man Programme gar nicht mit den komischen und umständlichen Prozessorbefehlen zu schreiben, sondern es gibt Computerprogramme, die Befehle, die für den Menschen einleuchtend sind, bereitstellen und in Befehle für einen Prozessor übersetzen. Solche Programme heißen Compiler (sprich: kompeiler).

Selbst wenn man mit Prozessorbefehlen programmieren will oder muss, tut man das nicht mit den eigentlichen Prozessorbefehlen - denn die bestehen ja nur aus Nullen und Einsen! - sondern mit einem speziellen Compiler, dem sogenannten Assembler.

Ein Beispiel:

mov al,61h

Das ist ein Assemblerbefehl und bedeutet schreibe die hexadezimale Zahl 61h in das Register al!
al ist dabei nur ein Name für das Register. Es könnte genauso gut Egon heißen.

Als Prozessorbefehl sieht das ganze so aus: 10110000 01100001

Das erste Byte ist der Befehl schreibe in das Register al!
Das zweite Byte ist die Zahl 61h: Dezimal geschrieben ist 61h = 6 x 16 + 1 x 1 = 97.
Die acht Stellen des Bytes als Zahl interpretiert bedeuten von rechts 1, 2, 4, 8, 16, 32, 64, 128.
Das Byte 01100001 bedeutet also
0x128 + 1x64 + 1x32 + 0x16 + 0x8 + 0x4 + 0x2 + 1x1 = 97

Hier noch einige Beispiele von Prozessorbefehlen, die einen vielleicht wundern:

Es gibt Befehle, mit deren Hilfe man das in einem Register stehende Bitmuster nach links oder rechts verschieben kann! So etwas lässt sich relativ leicht verdrahten, aber wofür soll das gut sein? Dazu muss man sich überlegen, was das Verschieben nach links bedeutet, wenn die Bits, die in dem Register stehen, gerade eine Zahl darstellen. Wenn du genau überlegst, fällt dir vielleicht auf, dass wir mit unseren Dezimalzahlen genau das selbe machen, wenn wir sie mit zehn multiplizieren: Wir schieben das Ziffernmuster nach links und hängen hinten eine Null dran. Im binären Zahlensystem entspricht der selbe Vorgang einer Multiplikation mit Zwei! Umgekehrt bedeutet das Verschieben nach rechts eine Division durch zwei - jedenfalls bei geraden Zahlen, denn deren erstes (rechtes) Bit ist immer Null! Bei ungeraden Zahlen muss man sich noch etwas einfallen lassen, was man mit der Eins im ersten Bit macht, die beim Verschieben quasi herunterfällt!

Ein weiterer wichtiger Befehl ist das Erhöhen oder Erniedrigen der Zahl in einem Register um Eins. Du wirst denken: "Um plus oder minus Eins zu rechnen, brauche ich doch keinen Computer!" Aber trotzdem kommt dieser Befehl bei Computern so häufig vor, dass es sich lohnt ihn separat zu verdrahten, weil der Befehl dann viel schneller abgearbeitet werden kann, als wenn man eine normale Addition mit Eins rechnen würde (unter anderem spart man dadurch das Kopieren der Eins aus dem Arbeitsspeicher in ein Register).

Man nennt das Erhöhen einer ganzen Zahl um Eins auch inkrementieren. Das bedeutet so viel wie eine kleinste Einheit (Inkrement) weiterzählen.

Das Erniedrigen um Eins nennt man dekrementieren.

Eine Gelegenheit, bei der der Computer das Inkrementieren ständig braucht, ist das Abarbeiten eines Programms:

Wir haben ja gesagt, dass das Programm im Arbeitsspeicher steht. Genau wie die Ein- und Ausgabedaten irgendwie zur CPU gelangen müssen, muss der Prozessor auch wissen, welchen der vielen Befehle im Arbeitsspeicher er als nächstes abarbeiten soll, bzw. welche der vielen Nullen und Einsen im Arbeitsspeicher überhaupt Befehle sind, denn da steht ja noch alles mögliche andere 'rum!

Dazu hat jeder Prozessor ein extra Register, in dem ein Befehlszähler steht. In diesem Register steht die Nummer (man sagt auch Adresse) der Speicherzelle im Arbeitsspeicher, in der der nächste auszuführende Befehl steht.

Sehr oft folgen viele nacheinander auszuführende Befehle direkt aufeinander. Das bedeutet, dass der Befehlszähler jedes Mal, wenn ein Befehl fertig ist, um Eins erhöht - inkrementiert - werden muss, damit der Computer seinen nächsten Befehl lesen kann.



4.4 Die CPU Inhaltsverzeichnis
Index
5. Was man einstöpseln kann