4. Aufgabenblatt

Werbung
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
Herunterladen