Um Binärzahlen zu subtrahieren, addieren wir zur erstan Zahl das Negative der zweiten Zahl. Das Negative einer Zahl a ist diejenige Zahl -a, so dass a + (-a) = 0 ist.
Es sei a = 93 = 01011101b bei einem Byte-Register.
Welche Zahl -a muss addiert werden, dass sich danach im Register eine 0 = 00000000b befindet?
0 1 0 1 1 1 0 1
+ 1 0 1 0 0 0 1 1
1 0 0 0 0 0 0 0 0
Da der rot dargestellte Übertrag wegen der Begrenzung auf 1 Byte verloren geht, erhalten wir das gewünschte Ergebnis 0.
Offensichtlich ist die Zahl -a = -93 = 10100011b. Wie erhält man nun diese Zahl? Vergleicht man die Binärdarstellung von 93 und -93, so erkennt man, dass fast alle Bit-Stellen den entgegengesetzten Wert enthalten, außer bei der letzten Stelle. Diese ist um eins größer als der entgegengesetzte Wert.
Die negative Zahl -a ergibt sich als sogenanntes Zweierkomplement der Zahl a. Man erhält das Zweierkomplement nach folgender Regel:
1. Bilde das Einerkomplement, indem alle Bit-Werte umgekehrt werden.
2. Addiere 1 zum Einerkomplement.
Kehrt man alle Bit-Werte einer Zahl um und addiert diese Zahl zur ursprünglichen, so ergibt sich 11111111b.
Wenn zu dieser Zahl 1 addiert wird, erhält man 100000000b, also bei Wegfall des neunten Bits 00000000b = 0.
Es soll a - b = a + (-b) berechnet werden. Zum Erzeugen des Zweierkomplements für -b werden alle Bits von b auf NOT-Gatters gelegt. Danach muss 1 addiert werden, wofür ein Addierwerk nötig ist. Zum Ergebnis wird schließlich a addiert, wofür wiederum ein Addierwerk benötigt wird.
Damit ergibt sich für ein Subtrahierwerk folgender Aufbau:
[Index] [Untersuchung einfacher Programmstrukturen] [Mikroprogramme]
Autor: Jürgen Dehmer
16.10.2006