Die Reihe zur Schaltungssimulation PiiRi
Ein Rechenwerk mit PiiRi: Der Trick mit den negative Zahlen
Um mit dem Rechenwerk auch Subtraktionen durchführen zu können, muss es eine Möglichkeit geben, negative Zahlen binär darzustellen - dafür verwenden wir einen Trick.
PiiRi ist in einer Demo-Version verfügbar unter kursbegleiter.de/piiri
Das Zweierkomplement: Die Grundlagen
Damit das Rechenwerk auch subtrahieren kann, muss es negative Zahlen verarbeiten können. Dafür verwendet man einen Trick: Wenn man eine Zahl und ihre Gegenzahl addiert, so muss immer `0` herauskommen: `4 + (-4) = 0`. Da im Computer aber immer mit einer festen Anzahl Stellen gearbeitet wird, genügt es, wenn nur diese Stellen Null sind und ein Übertrag an der obersten Stelle weg fällt.
So ist zum Beispiel `0100 + 1100 = (1)0000`. Da aber nur 4 Bit verwendet werden, fällt die vorderste `1` weg. `0100` und `1100` sind in diesem Sinne also Gegenzahlen und zwar `4` und `-4`.
Die negative Gegenzahl im Binärcode, das sogenannte Zweierkomplement erhält man, indem man in der Binärzahl zunächst alle Bits umdreht und dann `1` addiert.
Das Tolle am Zweierkomplement ist, dass es auch für eine Rechnung wie `3-5=?` funktioniert. Die Drei ist im Binärsystem: `0011`. Fünf ist als Binärzahl: `0101`, das Zweierkomplement davon, also `-5_10`, ist `1011_2`. Diese zwei Zahlen addiert ergibt ergibt `0101_2 + 1011_2 = 1110_2`. Das ist eine negative Zahl, was man am obersten Bit erkennt. Wenn ich davon wiederum das Zweierkomplement bilde, kommt `0010_2`, also `2_10` heraus, das Ergebnis der Rechnung war also `-2_10`.
Das Zweierkomplement in PiiRi
Du baust jetzt Komponenten, mit denen das Zweierkomplement einer Binärzahl erzeugt wird. Wir bauen diese Komponenten so, dass man sie mit einem Steuersignal aktivieren kann, ansonsten bleibt die Zahl unverändert. So wird der Addierer zum Subtrahierer, indem der zweite Summand bei Bedarf negiert wird.
Dazu brauchen wir zunächst eine Komponente, die alle Bits invertiert. Diese braucht die 4-Bit-Zahl am Eingang und das Steuersignal, sowie eine 4-Bit-Zahl am Ausgang. Die Zahl müssen wir zunächst mit einem Adapter aufteilen. Du könntest jetzt jedes Bit mit einem not-Gatter invertieren. Da wir es aber an und aus schalten wollen, nehmen wir das xor-Gatter, denn dieses verhält sich so, wie ein schaltbares not-Gatter. Für den Ausgang werden die Bits wieder zusammengeführt. Über die Wertetabelle sehe ich, dass die Komponente arbeitet, wie sie soll.
Um nun das Zweierkomplement zu berechnen, benötigst du wieder die 4-Bit-Zahl und das Steuersignal am Eingang und eine 4-Bit-Zahl am Ausgang. Zunächst geht die Zahl durch die Komponente von eben, wodurch alle Bits gegebenenfalls invertiert werden. Der Addierer addiert Eins, indem wir der Einfachheit halber das Steuersignal auf den Übertrags-Eingang legen.
Ich teste die Komponente erstmal für sich. Dann verwendet ich den Addierer um eine Zahl und ihre Gegenzahl (das Zweierkomplement) zu addieren. Dabei sollte immer `0` herauskommen, wenn ich das Steuersignal aktiviere.