Zahlendarstellung in den Rechnern Z1 und Z3 Timm Grams Fachhochschule Fulda Fachbereich Elektrotechnik und Informationstechnik © Timm Grams, Fulda, 05.08.02 (korrigiert: 05.11.03)
Download ReportTranscript Zahlendarstellung in den Rechnern Z1 und Z3 Timm Grams Fachhochschule Fulda Fachbereich Elektrotechnik und Informationstechnik © Timm Grams, Fulda, 05.08.02 (korrigiert: 05.11.03)
Zahlendarstellung in den Rechnern Z1 und Z3
Timm Grams Fachhochschule Fulda Fachbereich Elektrotechnik und Informationstechnik © Timm Grams, Fulda, 05.08.02 (korrigiert: 05.11.03)
Übersicht
Zahlendarstellung (22 Bits) Decodierung Codierung Exponent (Zweierkomplement) Lesen einer Gleitpunktzahl von der Tastatur
Zahlendarstellung (22 Bits)
Jede Zahl wird als 22-Bit-Wort dargestellt.
Reihenfolge: Vorzeichen, Exponent, Mantisse.
Die Mantisse ist 15-stellig. Die führende Eins wird nicht mit abgespeichert.
Der Exponent wird im Zweierkomplement dargestellt.
Das Schema: v a 6 a 5 ... a 1 a 0 b -1 b -2 ... b -13 b -14
Decodierung
v a 6 a 5 ... a 1 a 0 b -1 b -2 ... b -13 b -14 (-1) v (1.
b -1 b -2 ... b -13 b -14 ) 2 ·2 ( a 6 a 5 ... a 1 a 0 ) 2 a 6 ·2 7 Beispiel: Die Decodierung des Bitmusters 0 1111101 11100010101101 liefert die Dezimalzahl 0.235694885253906
Das Beispiel wird nun Schritt für Schritt ausgeführt.
Decodierung
- Beispiel v a 6 a 5 ... a 1 a 0 b -1 b -2 ... b -13 b -14 (-1) v (1.
b -1 b -2 ... b -13 b -14 ) 2 ·2 ( a 6 a 5 ... a 1 a 0 ) 2 a 6 ·2 7 0 1111101 11100010101101 + (1.
11100010101101 ) 2 · 2 ( 1111101 ) 2 1 ·2 7 Nebenrechnung: ( 1111101 ) 2 1 ·2 7 = 2 6 + 2 5 + 2 4 + 2 3 + 2 2 + 2 0 2 7 = 125 - 128 = - 3 Das Ergebnis wird hier eingefügt
Decodierung
- Beispiel v a 6 a 5 ... a 1 a 0 b -1 b -2 ... b -13 b -14 (-1) v (1.
b -1 b -2 ... b -13 b -14 ) 2 ·2 ( a 6 a 5 ... a 1 a 0 ) 2 a 6 ·2 7 0 1111101 11100010101101 + (1.
11100010101101 ) 2 ·2 -3 = (0.00111100010101101) 2 = 2 -3 + 2 -4 + 2 -5 + 2 -6 + 2 -10 + 2 -12 + 2 -14 + 2 -15 + 2 -17 = 0.235694885253906 (Das Ergebnis)
Codierung des Exponenten
Zweierkomplement Der Wertebereich des Exponenten geht von -64 bis 63.
Der Bereich der positiven Zahlen geht von 0000000 0 bis 0111111 63.
Der Bereich der negativen Zahlen geht von 1000000 64 - 2 7 = 64 - 128 = -64 bis 1111111 127 - 2 7 = 127 - 128 = -1.
Codierung des Exponenten
Zweierkomplement Positive Zahlen werden unmittelbar in die Dualzahl darstellung codiert.
Zu negativen Zahlen wird erst der Wert 128 addiert. Das Ergebnis wird in die Dualzahldarstellung über tragen.
Jede Zahl mit dem Exponenten -64 wird als Null interpretiert. Und jede Zahl mit dem Exponenten 63 gilt als Unendlich.
Codierung
Lesen einer Gleitpunktzahl von der Tastatur Eingegeben wird die Zahl 2998 ·10 Arbeitsschritte: -1 (Lichtge schwindigkeit in Meter pro Mikrosekunde). Die Nacheinander werden die Ziffern der Zahl 2998 übernommen.
Gespeichert wird die Ganzzahl in einem der 22-Bit-Register (R1 oder R2). Es wird im Folgenden R genannt.
Die Ganzzahl wird in die normalisierte Darstellung überführt.
Der Exponent wird berücksichtigt.
(Hier geht es um‘s Prinzip. Absolute Detailtreue - insbesondere was die Registerbelegung angeht - ist nicht angestrebt.)
Eingabe der Zahl 2998 ·10
-1 Schritt 2 10 Nebenrechnung: R mit (0010) 2 multiplizieren R mit (1000) 2 multiplizieren Werte addieren Register R
x xxxxxxx 00000000000010 x xxxxxxx 00000000000100 x xxxxxxx 00000000010000 x xxxxxxx 00000000010100
Das Ergebnis wird nun hier eingefügt
Eingabe der Zahl 2998 ·10
-1 Schritt 2 10 + 9 10 + 9 10 + 8 Register R
x xxxxxxx 00000000000010 x xxxxxxx 00000000010100 x xxxxxxx 00000000011101 x xxxxxxx 00000100100010 x xxxxxxx 00000100101011 x xxxxxxx 00101110101110 x xxxxxxx 00101110110110
Normalisierung: = (1011) 2 : Führende 1 „nach links herausschieben“ und dann den Dezimalpunkt um 14 Stellen nach links verrücken liefert die interne Darstellung von 2998 mit dem Exponenten 14-3 = 11
0 0001011 01110110110000
Eingabe der Zahl 2998 ·10
-1 Schritt 2 10 + 9 10 + 9 10 + 8 Normalisieren Jetzt steht die Zahl 2998 im Register.
Register R
x xxxxxxx 00000000000010 x xxxxxxx 00000000010100 x xxxxxxx 00000000011101 x xxxxxxx 00000100100010 x xxxxxxx 00000100101011 x xxxxxxx 00101110101110 x xxxxxxx 00101110110110 0 0001011 01110110110000
Eingabe der Zahl 2998 ·10
-1 Schritt 2998 10 -1 Register R
0 0001011 01110110110000
Nebenrechnung Für die Multiplikation mit 10 -1 wird folgende Beziehung genutzt: 10 -1 = (0.000110011001100110011...) 2 (0.00011001100110011) 2 = 2 -4 ·(1.1) 2 ·(1.0001) 2 ·(1.00000001) 2 = 2 -4 ·(1+2 -1 ) ·(1+2 -4 ) ·(1+2 -8 ) Die Multiplikation mit 10 -1 läuft also darauf hinaus, den Registerin halt nacheinander mit 2 -4 , 1+2 -1 , 1+2 -4 und 1+2 -8 zu multiplizieren.
Eingabe der Zahl 2998 ·10
-1 Schritt 2998 10 -1 Register R
0 0001011 01110110110000
Dieses Programm wird nun ausgeführt 2 -4
0 0000111 01110110110000
(1+2 -1 ) Mantisse Mantisse 1 2 -1 Mantisse (1+2 -1 ) Mantisse normalisieren
2 1
(
·
( ( (
1.01110110110000
0.10111011011000
10.00110010001000
1.00011001000100
) ) ) ) 2 2 2 2
Ergebnis in die Zahlendarstellung übernehmen
Eingabe der Zahl 2998 ·10
-1 Schritt 2998 10 -1 Register R
0 0001011 01110110110000
Dieses Programm wird nun ausgeführt 2 -4
0 0000111 01110110110000
(1+2 (1+2 (1+2 -1 -4 -8 ) ) )
0 0 0 0001000 0001000 0001000 00011001000100 00101010101000 00101011110011
Das Ergebnis wird hier eingefügt
Eingabe der Zahl 2998 ·10
-1 Schritt 2998 10 -1 Register R
0 0001011 01110110110000 0 0001000 00101011110011
Jetzt steht die Zahl
299.796875
gewünschte Resultat.
im Register R. Das ist - zumindest näherungsweise - das