Prof. Frederik Armknecht Sascha Müller Daniel Mäurer Grundlagen der Informatik 3 Wintersemester 09/10 Lösungsvorschlag zu 1. Übung 1 Präsenzübungen 1.1 Schnelltest a) Welche der Aussagen treffen auf jeden Rechner in von Neumann-Architektur zu? 2 Es existiert ein getrennter Befehls- und Datenspeicher. 4 Er besitzt ein Rechenwerk. 2 Alle Befehle haben die gleiche Länge. 2 Er besitzt eine Komponente zur Kommunikation über Netzwerke. b) Welches sind Bestandteile eines klassischen Betriebssystems? 2 BIOS (Basic Input Output System) 4 Speicherverwaltung 2 Speichercontroller 4 Prozessverwaltung 2 Graphische Benutzeroberfläche c) Was sind die typischen Merkmale von Programmierung in Assembler-Sprachen? 4 Geringes Abstraktionsniveau 2 Gute Wartbarkeit 4 Hohe Effizienz 2 I. A. leichte Portabilität 2 Typsicherheit d) Welche Aussagen zu Compiler, Assembler, Linker und Lader sind zutreffend? 2 Der Präprozessor übersetzt den Programmcode in eine andere Sprache. 4 Unter einem Compiler versteht man allgemein ein Programm, dass aus dem Code einer höheren Programmiersprache äquivalenten Programmcode einer niederen Sprache erzeugt. 2 Der Assembler erzeugt als Ausgabe nicht immer Maschinencode. 4 Der Linker verbindet mehrere Objekt-Programme zu einem ausführbaren Programm. 4 Der Lader wird jedes mal ausgeführt, wenn das Programm ausgeführt wird. 1.2 Gatter Mithilfe der Gatter AND (·), OR (+) und dem Inverter können alle logischen Schaltungen implementiert werden. Man nutzt gerade diese drei Gatter, da ihre Bedeutung intuitiv ist und man logische Ausdrücke leicht damit formulieren kann. Wir betrachten nun ein anderes, 1 Lösungsvorschlag zu 1. Übung Grundlagen der Informatik 3, WS 09/10 ausdrucksstärkeres Gatter, das NAND, das in der Notationsweise aus der Vorlesung folgendermaßen dargestellt wird: wobei gilt out = A · B. a) Erstellen Sie eine Wertetabelle für NAND. A 0 0 1 1 B 0 1 0 1 A·B 0 0 0 1 A·B 1 1 1 0 b) Betrachten Sie die folgende Schaltung, die ausschließlich aus NAND-Gattern besteht: Welche Funktion wird durch diese Schaltung implementiert? Verwenden Sie zur Vereinfachung die De Morganschen Gesetze: x+y = x·y x·y = x+y ( A · ( B · B)) · (( A · A) · B) =( A · B) · ( A · B) (wegen x · x = x ) =( A + B) · ( A + B) (De Morgan) =( A · B) + ( A · B) =A ⊕ B (De Morgan) Es handelt sich um eine XOR-Schaltung. c) Zeigen Sie, dass sich alle logischen Schaltungen mithilfe von ausschließlich NAND-Gattern implementieren lassen, man also prinzipiell nur einen einzigen Gattertyp benötigt. 2 Lösungsvorschlag zu 1. Übung Grundlagen der Informatik 3, WS 09/10 Es gilt • A = A·A • A · B = A · B = ( A · B) · ( A · B) • A + B = A · B = ( A · A) · ( B · B) Wenn sich aber AND, OR und die Invertierung mit NAND implementieren lassen, kann man damit alle Schaltungen realisieren. 1.3 Zahlendarstellung a) Gegeben sind die Zahlen 4638 und −42. 1. Stellen Sie diese Zahlen als 16-Bit breite Vorzeichen-Betragsdarstellung sowohl binär als auch hexadezimal dar. 463810 = 0001 0010 0001 11102 = 121E16 −4210 = 1000 0000 0010 10102 = 802A16 2. Stellen Sie diese Zahlen als 16-Bit 2er-Komplement dar. 463810 −4210 = = 0001 0010 0001 11102 = 121E16 1111 1111 1101 01102 = FFD616 b) Für welche Basis b gilt 121b = 10010 ? Zu lösen ist (wie gewohnt in Basis 10 geschrieben) 1 · b2 + 2 · b1 + 1 · b0 = 100 . Daraus folgt direkt b = 9. c) Betrachten Sie die beiden 3-Bit-Zahlen a = 1112 und b = 1012 . Berechnen Sie mit einem möglichst einfachen Verfahren a + b, a − b und a · b, ohne die Zahlen vorher in die Dezimaldarstellung umzuwandeln. Interpretieren Sie a und b nun als vorzeichenbehaftete 3-Bit Ganzzahlen in Zweierkomplementdarstellung. Können Sie die Ergebnisse, die Sie erhalten haben, irgendwie nutzen? 111 · 101 + 111 11100 100011 Wenn wir a und b als vorzeichenbehaftet betrachten, gilt a = −1 und b = −3, und außerdem a + b = −1 + (−3) = −4 = 1002 , a − b = −1 − (−3) = 2 = 0102 und a · b = −1 · (−3) = 3 = 0112 . Die hinteren drei Bits der Ergebnisse sind jeweils korrekt. 111 101 1100 111 101 010 d) Um auch rationale Zahlen binär darstellen zu können, kann man die Formel von Kapitel 1, Folie 17 wie folgt verallgemeinern: bn−1 bn−2 . . . b1 b0 , c1 c2 . . . cm−1 cm = 3 n −1 m i =0 i =1 ∑ bi 2 i + ∑ c i 2 − i Lösungsvorschlag zu 1. Übung Grundlagen der Informatik 3, WS 09/10 Die i. binäre Nachkommastelle wird also mit 2−i multipliziert. 1. Stellen Sie die Binärzahl 1100, 1012 dezimal dar. 23 + 22 + 2−1 + 2−3 = 12.625 2. Approximieren Sie π ≈ 3, 14159265 binär auf 4 Nachkommastellen genau. π ≈ 11, 00102 . Wichtig ist hier aber in erster Linie der Rechenweg: Entweder man berechnet π · 25 ≈ 100, 53 ≈ 1100100, 12 und verschiebt dann das Komma um 5 Stellen nach links, oder man entwickelt die Nachkommastellen von π durch Probieren in der Form π − 3 ≈ 2−3 + 2−6 + 2−11 + . . .. 1.4 Gleitkommazahlen Gegeben sei ein Rechner, der mit 8-Bit Gleitkommazahlen arbeitet. Diese 8 Bit teilen sich auf in 1 Bit für das Vorzeichen, 3 Bit für den Exponenten und 4 Bit für die Mantisse: V E E E M M M M r = −1V · (1 + M ) · 2E−Bias a) Wie groß ist der Bias, der für die Darstellung des Exponenten verwendet wird? Allgemein ergibt sich der Bias für einen n-Bit Exponenten als 2n−1 − 1. Da in diesem Beispiel 3 Bit für den Exponenten zur Verfügung stehen, beträgt der Bias also 23−1 − 1 = 3. b) Wandeln Sie die Zahl 6, 25 in die beschriebene Darstellung um. 6, 2510 = 110, 012 = 1, 10012 · 22 . Somit besteht die Mantisse aus 1001 und der Exponent mit Bias aus 2 + 3 = 510 = 1012 , das Vorzeichen ist 0. Insgesamt lautet die 8-Bit Gleitkommazahl 0 101 1001. c) Wandeln Sie die Zahl −0, 78125 in die beschriebene Darstellung um. −0, 7812510 = −1, 562510 · 2−1 = −1, 10012 · 2−1 . Für die Mantisse ergibt sich wie zuvor 1001, aber der Exponent mit Bias beträgt −1 + 3 = 210 = 0102 , das Vorzeichen ist 1, da negativ. Damit ergibt sich die Lösung als 1 010 1001. d) Geben Sie ein Verfahren in Pseudocode an, mit dem zwei Zahlen, die in dieser Darstellung vorliegen, miteinander multipliziert werden können. Als Eingabe erhalten Sie zwei Darstellungen von Gleitpunktzahlen als Tupel hV1 , M1 , E1 i bzw. hV2 , M2 , E2 i. Wie berechnet man das Ausgabetupel hV3 , M3 , E3 i? Sonderfälle (wie 0, NaN oder ∞) müssen Sie hier nicht betrachten. function multiply ( hV1 , M1 , E1 i >, hV2 , M2 , E2 i ): V3 := return hV3 , M3 , E3 i 4 Lösungsvorschlag zu 1. Übung Grundlagen der Informatik 3, WS 09/10 function multiply ( hV1 , M1 , E1 i , hV2 , M2 , E2 i ): V3 := V1 ⊕ V2 E3 := E1 + E2 − 3 M3 := (1 + M1 ) · (1 + M2 ) // davon die ersten 5 Stellen while M3 ≥ 2.0 M3 := M3 /2 E3 := E3 + 1 end while M3 := M3 − 1.0 return hV3 , M3 , E3 i e) Multiplizieren Sie mit diesem Verfahren die beiden Repräsentation von 6, 25 und −0, 78125. Geben Sie das Ergebnis in Gleitkommadarstellung an und wandeln Sie es in die Dezimalzahldarstellung um. Es ergibt sich V3 = 1. Das Produkt aus M1 + 1 und M2 + 1 ist 10, 011100012 , wovon nur die ersten fünf Stellen betrachtet werden (4 Bits Mantissenbreite + implizite 1). Nach Multiplikation mit 2 und entfernen der impliziten 1 ergibt sich M3 = 0, 00112 und E3 = 5, als Gleitkommazahl 1 101 0011. Als Dezimalzahl ist dies nach der Formel −1V · (1 + M ) · 2E−Bias = −11 · 1, 00112 · 25−3 = −4, 75. 2 Hausübungen 2.1 Negation von Integern In der Zweierkomplementdarstellung wird eine Zahl negiert, indem man sie invertiert und 1 addiert, also − x := x + 1. Zeigen Sie, dass dann auch gilt − x = x − 1. 4 Punkte Setze y := x − 1. de f Es gilt − x = −(y + 1) = −y − 1 = (y + 1) − 1 = y = y + 1 − 1 = x − 1. 2.2 Schnelle Integer-Multiplikation Wie Sie in Aufgabe 1.3 c gesehen haben, hat die Multiplikation von Binärzahlen quadratische Komplexität in der Anzahl der Bit-Operationen. Durch Ausnutzung der Bit-Darstellung kann man dies jedoch für gewisse Multiplikatoren stark beschleunigen. Wir nutzen hierzu aus, dass man an Bitwerte eine 0 anhängen kann, um sie mit 2 zu multiplizieren. Der Syntax der Programmiersprache C folgend schreiben wir a << b, wenn wir an einen Wert a eine Anzahl von b Nullen anhängen (und damit a · 2b berechnen). Damit lässt sich zum Beispiel das Ergebnis von 65x effizient mit einem solchen Bit-Shift und einer Addition erreichen, da 65 = 26 + 1 und daher 65x = ( x << 6) + x. Optimieren Sie die folgenden Operationen auf diese Weise und geben Sie jeweils die Anzahl der Bit-Operationen an. Sie können außerdem die Formeln aus der Aufgabenstellung von Aufgabe 2.1 verwenden. a) 5x = 1 Punkt 5x = ( x << 2) + x — zwei Operationen 5 Lösungsvorschlag zu 1. Übung Grundlagen der Informatik 3, WS 09/10 b) 162x = 162x = ( x << 7) + ( x << 5) + ( x << 1) – fünf Operationen 1 Punkt c) −1024x = 1 Punkt −2x = x << 10 + 1 bzw. −2x = ( x << 10) − 1 – drei Operationen. 2.3 Gleitpunktzahlen Gegeben ist eine Gleitpunktzahl G im einfach genauen IEEE-754 Standard in Hexadezimaldarstellung G = C080 000016 Leiten Sie den dezimalen Wert von G her. Der Lösungsweg muss klar erkennbar sein! 3 Punkte Die Zahl in Binärschreibweise: G = 1100 0000 1000 0000 0000 0000 0000 00002 . Das erste Bit ist gesetzt, daher handelt es sich um eine negative Zahl (S = 1). Es gilt E = 1000 00012 = 129 und M = 0, 000 0000 0000 0000 0000 00002 = 0. Daher gilt: G = (−1)S · (1 + M) · 2(127−E) = (−1) · 1, 0 · 22 = −4, 0 6