Rechnergrundlagen SS 2007 4. Vorlesung Inhalt • Binäre Darstellung von Integer-Zahlen – Vorzeichen-Betrag – 2er-Komplement – BCD • Addition und Subtraktion binär dargestellter Zahlen • Carry und Overflow • Little Endian / Big Endian • Umrechnung in eine binäre Darstellung Integer-Zahlen (Signed Magnitude) Most Significant Bit (MSB) definiert das Vorzeichen. Vorzeichenbit muss gesondert ausgewertet werden. Es existiert eine positive und eine negative Darstellung der Null. Wertebereich: −2 n −1 +1 ≤ Z ≤ 2 n −1 −1 Integer-Zahlen (2er-Komplement) Most Significant Bit (MSB) definiert das Vorzeichen. positive Zahl: MSB = 0, 3 niederwertigen Bits werden wie gewohnt ausgewertet negative Zahl: MSB = 1, 3 niederwertigen Bits werden invertiert, 1 addiert und anschließend ausgewertet Wertebereich: −2 n −1 ≤Z ≤2 n −1 −1 Vorteile 2er-Komplement Darstellung • Es existiert nur eine Null. • Das Vorzeichenbit muss für Addition und Subtraktion nicht gesondert ausgewertet werden. • Signifikante Vereinfachung der Berechnung. • 2er-Komplement wird in der Praxis fast ausschließlich eingesetzt. Beispiel 2er-Komplement Zu berechnen: (6)10-(1)10 = (6)10 + (-1)10 = (5)10 (6)10: (0110)2 -1: Betrag 001, invertiert 110, 1 addiert 111 (-1)10: (1111)2-2k 0 1 1 0 + 1 1 1 1 C 1 1 0 1 0 1 0 1 Ergebnis: (0101)2-2k = (5)10 Beispiel 2er-Komplement Zu berechnen: (4)10 + (5)10 = (9)10 (4)10: (0100)2 0 1 0 0 + 0 1 0 1 C 1 0 0 1 0 0 1 (5)10: (0101)2 Ergebnis: (1001)2-2k = (-7)10 Overflow Beispiel 2er-Komplement Zu berechnen: (3)10-(6)10 = (-3)10 (3)10: (0011)2 -6: Betrag 110, invertiert 001, 1 addiert 010 (-6)10: (1010)2-2k 0 0 1 1 101, invertiert 010, 1 addiert 011 + 1 0 1 0 0 0 1 0 1 1 0 1 Ergebnis: (1101)2-2k = (-3)10 Überlauf (Overflow, OV) Ein Überlauf entsteht, wenn bei Operationen von 2er-Komplement-Zahlen der Wertebereich überschritten wird. Ein Überlauf liegt dann vor, wenn beide Summanden ein gleiches Vorzeichen haben und das Ergebnis ein anderes. Beispiel 2er-Komplement Zu berechnen: (-6)10-(7)10 = (-6)10 + (-7)10 = (-13)10 (-6)10: (1010)2-2k 1 0 1 0 + 1 0 0 1 1 0 0 0 1 0 0 1 1 (-7)10: (1001)2-2k Ergebnis: (0011)2-2k = (3)10 Overflow OV-Tabelle Addition 2er-Komplement Summand A B + + + + + + - + + - - Summe Y + Flag OV 0 + + 1 0 - 0 0 0 + - 1 0 Carry (VZ) Cin Cout 0 0 1 0 1 1 0 1 0 0 0 1 0 1 1 1 Tabelle Übung Bitte berechnen Sie: 1 0 1 0 1 + 0 1 0 1 1 Bitte interpretieren Sie das Ergebnis unter der Annahme, dass es sich um eine 2er-Komplement Darstellung handelt. Tritt ein Overflow auf? Little Endian – Big Endian Bei der Interpretation, z.B. einer Integer-Zahl, ist zu unterscheiden, ob das least significant Byte an der höchsten Adresse („big endian“) oder der niedrigsten Adresse („little endian“) gespeichert wird. Beispielsweise Speicherung eines 4 Byte Integer: MSB Æ Byte3 Byte2 Byte1 Byte0 Å LSB Speicheradresse BasisAdresse+0 BasisAdresse+1 BasisAdresse+2 BasisAdresse+3 Little Endian Byte0 Byte1 Byte2 Byte3 Little Endian: PC (Intel, AMD), DEC, … Big Endian Byte3 Byte2 Byte1 Byte0 Big Endian: Apple (Motorola), Sun, … Beispiel: -96 000 0000 0000 0000 128 64 32 16 8 4 2 1 FF A0 A0 FF 000 0000 0110 0000 Betrag 111 1111 1001 1111 1er-Komplement 111 1111 1010 0000 2er-Komplement 1111 1111 1010 0000 Vorzeichen Hex-Editor auf einem PC (Intel) Hex-Darstellung in einem PC Interpretation als signed 2 Byte Integer 4F 00 79 FF FF -1 A1 FF -95 Binary Coded Decimal (BCD) BCD Code I • Binary Coded Decimal (BCD) • jede Dezimalziffer wird mit 4 Bit dargestellt • jede Einheit mit vier binären Stellen wird als Tetrade (Vierergruppe) bezeichnet • von insgesamt 16 möglichen Tetraden werden nur 10 genutzt • die nicht genutzten werden PseudoTetraden genannt BCD Code II Dezimal 23 22 21 20 0 0 0 0 0 1 0 0 0 1 2 0 0 1 0 3 0 0 1 1 4 0 1 0 0 5 0 1 0 1 6 0 1 1 0 7 0 1 1 1 8 1 0 0 0 9 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 Tetraden Pseudotetraden Beispiel 0010 2 0110 6 269 1001 9 BCD-Addition • BCD-Addition wird für jede Tetrade durchgeführt. • Eine übergelaufene Tetrade muss durch Addition von 6 korrigiert werden. • Eine Pseudotetrade (als Ergebnis einer Stellen oder Korrekturaddition) muss durch Addition von 6 korrigiert werden. Beispiele 1 0 0 0 1 1 0 0 0 1 0 0 1 0 0 0 1 0 0 0 1 0 1 1 0 0 1 1 1 0 1 1 1 0 1 1 0 1 1 0 0 0 0 1 0 0 0 1 1 1 0 1 0 1 1 0 1 0 0 1 1 Übertrag Pseudotetrade 8 + 9 = 17 7 + 6 = 13 BCD-Addition: Übung 68 + 35 = 103 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 1 0 0 1 0 1 1 0 1 0 0 0 1 0 0 0 0 1 0 1 1 1 0 1 0 1 1 0 1 0 0 1 1 0 0 0 0 0 0 1 1 BCD-Subtraktion • Subtraktion wird durch Addition des Zehnerkomplements der zu subtrahierenden Zahl realisiert. • Pseudotetraden müssen korrigiert werden. • Ergibt sich in die 5. Stelle einer Tetrade kein Übertrag, so ist das Ergebnis eine negative Zahl. – In diesem Fall muss für die Ermittlung des Betrags wiederum das Zehnerkomplement gebildet werden. Beispiel 1: Subtraktion 9–7=2 10er-Komplement für 7: 3 1 0 0 1 0 0 1 1 1 1 1 1 0 0 0 1 1 0 1 1 1 0 0 1 0 Beispiel 2: Subtraktion 7 – 9 = -2 0 1 1 1 0 0 0 1 1 1 1 1 0 0 0 10er-Komplement für 9: 1 • Kein Übetrag in die 5. Stelle • negative Zahl • 10er-Komplement 8: 2 • Ergebnis: -2 3-Exzess Code, Aiken Code • Beim 3-Exzess Code werden die ersten und letzten drei Tetraden der 16 möglichen nicht verwendet. Die Tetrade 0000 kommt nicht vor. Das Neuner-Komplement kann durch einfache Inversion gebildet werden. • Beim Aiken Code werden die ersten und die letzten 5 Tetraden verwendet. Das NeunerKomplement kann durch einfache Inversion bestimmt werden. Gray Code Beim Gray Code wird beim Übergang von einerTetrade zur nächst höheren Tetrade nur ein Bit geändert. Derartige Codes werden als einschrittig oder progressiv bezeichnet. G R A Y G R A Y 0 0 0 0 0 5 0 1 1 1 1 0 0 0 1 6 0 1 0 1 2 0 0 1 1 7 0 1 0 0 3 0 0 1 0 8 1 1 0 0 4 0 1 1 0 9 1 1 0 1 Fazit: Integer-Zahlen • Unmittelbare Interpretierbarkeit der Darstellung ist für die Verwendung in Rechnern von geringer Bedeutung. • Zentrale Bedeutung haben die Vereinfachung von arithmetischen Operationen und eine weitgehende Absicherung gegen Fehler wie Überlauf. • Optimale Darstellung hängt vom konkreten Einsatz und den Anforderungen ab. Darstellung gebrochener Zahlen allgemeine Form: a= ∞ ∑ i =−∞ zi bi Verwendung von n+1 Bits für Vorkommastellen, m Bits für Nachkommastellen und 1 Bit für Vorzeichen: a= i =n ∑ i =− m zi bi n −1 −1 = znb + zn −1b ... z1b + z0 + z−1b + ... z− mb n −m 2er-Komplement Darstellung: MSB zeigt das Vorzeichen an Auswertung MSB = 1: negative Zahl; Betrag wird komplementiert; im LSB wird 1 hinzuaddiert Übung Gesucht ist eine gebrochene Zahl a in Dezimal-Darstellung, die als 2er-Komplement folgendermaßen codiert ist: a = (1001,1100) 2− 2 k Da MSB=1 handelt es sich um eine negative Zahl und die Bits sind zu komplementieren: (0110, 0011) Außerdem muss das LSB um 1 erhöht werden a = (0110, 0100) 2 Umwandlung ins Dezimalsystem: a = (−6, 25)10 Umrechnung einer Dezimalzahl (235)10 = (z)2 235 : 2 = 117,Rest 1 117 : 2 = 58, Rest 1 58 : 2 = 29, Rest 0 29 : 2 = 14, Rest 1 14 : 2 = 7, Rest 0 7 : 2 = 3, Rest 1 3 : 2 = 1, Rest 1 1: 2 = 0, Rest 1 11101011 Test: 1+2+8+32+64+128 = 235 Regel zur Umrechnung einer Dezimalzahl a / b2 = d 0 + r0 / b2 d 0 / b2 = d1 + r1 / b2 d n −1 = rn d n − 2 = rn ∗ b2 + rn −1 ... ... d n − 2 / b2 = d n −1 + rn −1 / b2 d n −1 / b2 = 0 + rn / b2 a = rn ∗ b2 n + ...+r1 ∗ b2 + r0 n a = ∑ ri ∗ b2i i =0 Hornerschema (4 Ziffern) (a )10 = (r3 r2 r1r0 )b = r3 b + r2b + r1b + r0 b 3 2 1 = r3 b + r2 b + r1b + r0 3 2 = (r3 b + r2 b + r1 )b + r0 2 = ((r3 b + r2 )b + r1 )b + r0 0 Hornerschema (allgemein) Effiziente Methode zur Umwandlung von Zahlen zur Basis b in das Dezimalsystem. (rn rn −1...r1r0 )b = (...((rnb + rn −1 )b + rn − 2 )b + ... + r1 )b + r0 (1324)5 = ((1 ∗ 5 + 3) ∗ 5 + 2) ∗ 5 + 4 = 214 Umwandlung von Nachkommastellen Regel Übung (0,28125)10 a ∗ b = v0 , a0 0,28125*2 = 0,5625 a0 ∗ b = v1 , a1 0,5625*2 = 1,125 a1 ∗ b = v2 , a2 0,125*2 = 0,25 ... 0,25*2 = 0,5 an −1 ∗ b = vn , 0 0,5*2 = 1,0 (a )10 = (0, v0 v1...vn )b (0,28125)10 = (0,01001)2