Prof. Frederik Armknecht Sascha Müller Daniel Mäurer Grundlagen der Informatik 3 Wintersemester 09/10 1. Übung Abgabe: 03.11. – 09.11.2009 1 Präsenzübungen 1.1 Schnelltest a) Welche der Aussagen treffen auf jeden Rechner in von Neumann-Architektur zu? 2 2 2 2 Es existiert ein getrennter Befehls- und Datenspeicher. Er besitzt ein Rechenwerk. Alle Befehle haben die gleiche Länge. Er besitzt eine Komponente zur Kommunikation über Netzwerke. 2 2 2 2 2 BIOS (Basic Input Output System) Speicherverwaltung Speichercontroller Prozessverwaltung Graphische Benutzeroberfläche 2 2 2 2 2 Geringes Abstraktionsniveau Gute Wartbarkeit Hohe Effizienz I. A. leichte Portabilität Typsicherheit b) Welches sind Bestandteile eines klassischen Betriebssystems? c) Was sind die typischen Merkmale von Programmierung in Assembler-Sprachen? d) Welche Aussagen zu Compiler, Assembler, Linker und Lader sind zutreffend? 2 Der Präprozessor übersetzt den Programmcode in eine andere Sprache. 2 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. 2 Der Linker verbindet mehrere Objekt-Programme zu einem ausführbaren Programm. 2 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, ausdrucksstärkeres Gatter, das NAND, das in der Notationsweise aus der Vorlesung folgendermaßen dargestellt wird: 1 1. Übung Grundlagen der Informatik 3, WS 09/10 wobei gilt out = A · B. a) Erstellen Sie eine Wertetabelle für NAND. 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 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. 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. 2. Stellen Sie diese Zahlen als 16-Bit 2er-Komplement dar. b) Für welche Basis b gilt 121b = 10010 ? 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? 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 = n −1 m i =0 i =1 ∑ bi 2 i + ∑ c i 2 − i Die i. binäre Nachkommastelle wird also mit 2−i multipliziert. 2 1. Übung Grundlagen der Informatik 3, WS 09/10 1. Stellen Sie die Binärzahl 1100, 1012 dezimal dar. 2. Approximieren Sie π ≈ 3, 14159265 binär auf 4 Nachkommastellen genau. 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? b) Wandeln Sie die Zahl 6, 25 in die beschriebene Darstellung um. c) Wandeln Sie die Zahl −0, 78125 in die beschriebene Darstellung um. 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 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. 3 1. Übung Grundlagen der Informatik 3, WS 09/10 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 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 b) 162x = 1 Punkt c) −1024x = 1 Punkt 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 4