Fachgebiet Rechnerarchitektur Fachbereich Informatik Lösungsvorschlag 4. Übung Technische Grundlagen der Informatik II Sommersemester 2009 Aufgabe 4.1: Zahlensysteme a) Bitte füllen Sie die leeren Zellen der folgenden Tabelle aus. Alle Zahlen sind positiv. Basis 2 (Dualzahl) Basis 8 Basis 10 Basis 16 100010001101111 42157 17519 446F 111011000001010 73012 30218 760A b) In der folgenden Tabelle sind zwei Zahlen im Zweikomplement angegeben. Berechnen Sie die äquivalenten Werte (positiv, negativ) zu den anderen Basen. Zweikomplement-Zahl Basis 8 Basis 10 Basis 16 00110011 63 51 33 11001101 -63 -51 -33 c) Welche Zahl ist größer? Konvertieren Sie die Zahlen vorher in die Basis 16. c1) 0110102 oder A916 1A16 < A916 c2) 7F116 oder 201910 7F116 > 7E316 d) Führen Sie die folgenden Additionen aus, indem Sie die Werte zuerst in die Basis 10 umwandeln: d1) 01101012 + 001101112 53 + 55 = 108 d2) E9216 + 101100112 3730 + 179 = 3909 e) Konvertieren Sie 2210 in die Basis 2 mit der Divisionsmethode. 22/2 = 11/2 = 5/2 = 2/2 = 1/2 = 11 5 2 1 0 r=0 r=1 r=1 r=0 r=1 101102 f) Konvertieren Sie 11110112 in die Basis 10. 123 Seite 1 von 7 g) Konvertieren Sie 21220013 in die Basis 9. 25619 h) Geben Sie die Darstellung der folgenden zwei Zahlen, die in Vorzeichen-Betrag Darstellung angegeben sind, als 1K-Zahl und 2K-Zahl an. Basis 2 mit Vorzeichen und Betrag Einskomplement-Zahl Zweikomplement-Zahl 0100 1101 0100 1101 0100 1101 1001 0001 1110 1110 1110 1111 i) BCD (Binary coded decimal) stellt jede (vorzeichenlose) Dezimalziffer mittels 4 Bit dar. In der ungepackten Version (unpacked BCD) ist je Byte eine Ziffer, in EBCDIC (von IBM) werden die oberen 4 Bits mit 1111 belegt. Bei der gepackten Version (packed BCD) sind zwei Dezimalziffern in einem Byte. Füllen Sie die folgende Tabelle aus. Dez. Binär BCD unpacked (EBCDIC) BCD packed 27 11011 1111 0010 1111 0111 0010 0111 173 10101101 1111 0001 1111 0111 1111 0011 0001 0111 0011 Aufgabe 4.2: Zahlenbereich a) Welcher größte dezimale Wert lässt sich mit 128 Bit ohne Vorzeichen (unsigned) darstellen? 2n - 1 = 2128 -1 ( = 34028236692093846346337460743176821145510) b) Im welchen Bereich lassen sich vorzeichenbehaftete Dualzahlen (Vorzeichenzahlen) mit 128 Bit darstellen, wenn das erste Bit (MSB) das Vorzeichen angibt? 2n-1 - 1 = 2127 -1 ( = ± 17014118346046923173168730371588410572710) c) In UNIX Systemen wird – aus historischen Gründen – die Zeit in Sekunden seit dem 1. Januar 1970, 0 Uhr gezählt. In welchem Jahr gibt es Probleme mit 32-BitMaschinen, wenn die Zahl vorzeichenlos gespeichert ist? 232 = 4294967296 4294967296/(60*60*24*365) ≈ 136 1970 + 136 = 2106 Der genaue Zeitpunkt ist Sonntag, 7. Februar 2106 um 6:27:15 Uhr GMT d) Im welchen Jahr ist dieser Zeitpunkt, wenn die Zahl als Zweikomplement interpretiert wird? 232-1 = 2147483648 2147483648/(60*60*24*365) ≈ 68 1970 + 68 = 2038 Der genaue Zeitpunkt ist Dienstag, 19. Januar 2038 um 03:14:07 Uhr GMT Aufgabe 4.3: Gleitkommazahlen a) Konvertieren Sie die folgenden Zahlen in die angegebene Basis. a1) 10111,110112 in die Basis 10; Seite 2 von 7 Zunächst die Stellen vor dem Komma in die Basis 10 umrechnen: 101112 = 2310 Jetzt die Stellen nach dem Komma mit Hilfe des Algorithmus' aus dem Anhang von Foliensatz Kapitel 1 - Zahlendarstellungen (Folie 55) berechnen: Stellen nach dem Komma: 0,11011 1. Schritt: 1,1011 (Stellen um 1 Stelle nach links verschoben) + 110,11 (Stellen um 3 Stellen nach links verschoben) 1000,0111 (vor dem Komma steht eine 8) Nun mit den übrigen Nachkommastellen jeweils genauso verfahren: 2. Schritt: 0,111 + 011,1 100,011 (vor dem Komma steht eine 4) 3. Schritt: 0,11 + 11,0 11,11 (vor dem Komma steht eine 3) 4. Schritt: 1,1 + 110,0 111,1 (vor dem Komma steht eine 7) 5. Schritt: 1,0 + 100,0 101,0 (vor dem Komma steht eine 5) (nun Ende, da keine Nachkommastellen mehr übrig sind) Die Lösung ist also 23,8437510. a2) 37,20312510 in die Basis 2; Zunächst die Dezimalstellen vor dem Komma wie gewohnt in eine Binärzahl umwandeln: 3710 = 1001012 Jetzt die Nachkommastellen mit Hilfe des Algorithmus' aus dem Anhang von Foliensatz Kapitel 1 - Zahlendarstellungen (Folie 54) berechnen: 0,203125*2 = 0,40625 0,40625*2 = 0,8125 0,8125*2 = 1,625 0,625*2 = 1,25 0,25*2 = 0,5 0,5*2 = 1,0 Aus dieser Rechnung lassen sich nun die binären Nachkommastellen aus der Stelle vor dem Komma jedes Ergebnisses auf der rechten Seite von oben nach unten ablesen. Das Ergebnis lautet also 100101,001101(0)2 b) IEEE-754 Standard Gegeben ist die folgende binäre Gleitkommazahl nach IEEE-754-Standard: 0 1000 1111 1000 1001 1010 1011 1100 000 (fraction) Geben Sie die Dezimalzahl an. Das erste Bit ist das Vorzeichen, hier 0, also ist die Zahl positiv. Die nächsten 8 Bit sind der Exponent der Zahl: 1000 11112 = 14310. Der Exponent ist also 143 - 127 = 16. Die letzten 23 Bit sind die Nachkommastellen der Mantisse (die Stelle vor dem Komma ist immer 1). Man kann nun die Mantisse nach der Methode aus Aufgabe a2) berechnen oder auch einzeln die jeweiligen Brüche aufaddieren (sehr Seite 3 von 7 aufwendig). Die Mantisse ist dann 1,537777, das Ergebnis lautet 216*1,537777 ≈ 100779,75. Die etwas schnellere Methode besteht darin, zunächst die Mantisse um genau so viele Stellen nach links zu verschieben, wie der Exponent es zulässt, in diesem Fall also um 16 Stellen (implizite 1 vor dem Komma nicht vergessen!). Dann kann man den Wert vor dem Komma berechnen: 1 1000 1001 1010 10112 = 10077910 Dann noch die übrigen Nachkommastellen (nun weniger): 0,112 = 0,7510 Das Ergebnis ist also auch hier 100779,75. c) Geben Sie IEEE-754-Darstellung für 10001,100012 an. Zunächst muss die Zahl so nach links oder rechts verschoben werden, dass eine 1 vor dem Komma steht, in diesem Fall muss die Zahl um 4 Stellen nach rechts verschoben werden: 1,0001100012. Die Mantisse ist also 0001 1000 1000 0000 0000 000 (auf 23 Bit aufgefüllt). Der Exponent ist 4, da wir die Zahl um 4 Stellen nach rechts verschoben haben (also 4-mal durch 2 geteilt). Auf 4 muss nun noch 127 addiert werden, dies ergibt 131. 13110 = 1000 00112 Das Vorzeichen ist 0, da die Zahl positiv ist, das Gesamtergebnis ist also: Binärer Wert +10001,100012 Vorzeichen, (biased) Exponent, Fraction 0 1000 0011 0001 1000 1000 0000 0000 000 Aufgabe 4.4: Addition von positiven Dualzahlen Addieren Sie die folgenden Dualzahlen und geben Sie an, ob ein Überlauf und/oder Übertrag aufgetreten ist. Geben Sie dazu auch die entsprechenden dezimalen Werte an. Welcher größte Wert kann jeweils mit den vorhandenen Bits dargestellt werden? a) 01101 + 10010 = 11111 kein Überlauf 13 + 18 = 31 größter Wert 25 – 1 = 31 b) 0110111 + 0011100 = 1010011 kein Überlauf 55 + 28 = 83 größter Wert 27 – 1 = 127 c) 0110 0101 + 1000 1100 = 1111 0001 kein Überlauf 101 + 140 = 241 größter Wert 28 – 1 = 255 d) 1101 0010 + 1000 0100 = 1 0101 0110 Überlauf 210 + 132 = 342 größter Wert 28 – 1 = 255 Seite 4 von 7 Aufgabe 4.5: Addition von 2K-Zahlen Addieren Sie die folgenden 2K-Zahlen und geben Sie an, ob ein Überlauf und/oder Übertrag aufgetreten ist. Geben Sie dazu auch die entsprechenden dezimalen Werte an. Welcher kleinste und welcher größte Wert kann jeweils mit den vorhandenen Bits dargestellt werden? a) 01101 + 10010 = 11111 kein Überlauf 13 + -14 = -1 kleinster Wert: -24 = -16, größter Wert 24 – 1 = 15 b) 01 0111 + 01 1100 = (0) 11 0011 Überlauf (alte Vorzeichen waren beide 0, danach Vorzeichenwechsel) Ergebnis ist mit n Stellen nicht mehr darstellbar, aber mit n+1 Stellen. 23 + 28 = 51 bei n+1 Stellen 23 + 28 = -13 bei Betrachtung von n Stellen kleinster Wert: -25 = -32, größter Wert 25 – 1=31 c) 0110 0101 + 1000 1100 = 1111 0001 kein Überlauf 101 + -116 = -15 kleinster Wert: -27 = -128, größter Wert 27 – 1 = 127 d) 1101 0010 + 1000 0100 = (1) 0101 0110 Überlauf -124 + -46 = -170 bei n + 1 Stellen -124 + -46 = 86 bei Betrachtung von n Stellen kleinster Wert: -27 = -128, größter Wert 27 – 1 = 127 Aufgabe 4.6: Subtraktion von positiven Dualzahlen Subtrahieren Sie die folgenden Dualzahlen unter Berücksichtigung der Borge-Bits (nach der ersten Methode in der Vorlesung, Vollsubtrahierer-Prinzip). Ergibt sich ein nicht mehr darstellbares negatives Ergebnis? Geben Sie dazu auch die entsprechenden dezimalen Werte an. a) 1100 0001 – 0011 0100 1 1 0 – 0 0 1 1 1 1 0 0 0 1 1 0 0 0 0 1 0 1 0 0 1 1 1 0 1 Borge-Bits (darstellbar) 193 – 52 = 141 b) 1 0010 – 1 1000 1 – 1 0 0 1 0 1 0 0 0 Seite 5 von 7 (1) 1 (1) 1 1 0 1 0 Borge-Bits (nicht mehr darstellbar) Unter Berücksichtigung des Borrow-Outs ergibt sich mit dem negativen Stellengewicht (hier -32) der richtige Wert. Das Ergebnis kann auch als 2K-Zahl interpretiert werden, wenn die Borrow-Out-Stelle zusätzlich hinzugenommen wird. 18 – 24 = 26 – (32) = -6 Das Ergebnis ist negativ geworden, ist nicht mehr als positive Dualzahl darstellbar, also Überlauf. Kann zum Vergleich benutzt werden. Die zweite Zahl war größer als die erste. Aufgabe 4.7: Addierer in Verilog Verwenden Sie für die folgenden Teilaufgaben die Verzögerungszeiten 8ns für NOT, 10ns für NAND/NOR, 13ns für AND/OR, 15ns für XOR. a) Beschreiben und simulieren Sie einen Halbaddierer. module HalfAdder(A, B, Sum, Carry); input A, B; output Sum, Carry; assign #15 Sum = A ^ B; assign #13 Carry = A & B; endmodule b) Beschreiben Sie in Verilog einen Volladdierer unter Benutzung des Moduls aus Teilaufgabe a als Untereinheit. Verwenden Sie die gleichen Verzögerungszeiten. module FullAdder(A, B, Cin, Sum, Cout); input A, B, Cin; output Sum, Cout; wire s1, c1, c2; HalfAdder ha1(A, B, s1, c1); HalfAdder ha2(Cin, s1, Sum, c2); assign #13 Cout = c1 | c2; endmodule c) Beschreiben Sie einen Volladdierer (siehe Abbildung) unter Benutzung von wireHilfsvariablen und Gatter-Primitive (z. B. „nor #13 O2(out, in1, in2);“). Seite 6 von 7 A B Cin S1 X1 A1 A3 A2 X2 Sum O1 Cout T3 T1 T2 module fulladd(A, B, Cin, Sum, Cout); input A, B, Cin; output Sum, Cout; wire S1, T1, T2, T3; xor #15 X1(S1, A, B), X2(Sum, S1, Cin); and #13 A1(T3, A, B), A3(T1, Cin, A), A2(T2, B, Cin); or #13 O1(Cout, T3, T1, T2); endmodule Seite 7 von 7