LUDWIG -M AXIMILIANS -U NIVERSITÄT M ÜNCHEN I NSTITUT FÜR I NFORMATIK P ROF. D R . H ANS J ÜRGEN O HLBACH Sommersemester 2006 Übungsblatt 1 24.04.2006 Technische Grundlagen der Informatik Abgabetermin: 03.05.2005, 11:00 Uhr s.t. Achtung: Bitte beachten Sie die Hinweise auf dem Merkblatt. Geben Sie bei der Abgabe Ihrer Hausaufgaben immer die Nummer Ihrer Übungsgruppe, Ihren Namen und Ihre Matrikelnummer an. Zur Abgabe steht ein Briefkasten an der Bibliothek in der Theresienstraße zur Verfügung. Aufgabe 1: (H) Hexadezimal-Zahlendarstellung a. b. c. (10 Pkt.) Wandeln Sie die folgenden Hexadezimalzahlen in ihre Binärdarstellung sowie in ihre Dezimaldarstellung um. Achten Sie darauf, dass der Rechenweg ersichtlich ist: (i) (98E4)16 (ii) (ABCD)16 Wandeln Sie folgende Dualzahlen in ihre Hexadezimaldarstellung um: (i) (0101110011101011)2 (ii) (1111000110100100)2 Die Umrechnung einer Dualzahl in eine Hexadezimalzahl lässt sich wie folgt durchführen: – Die Dualzahl wird – beim niederwertigsten Bit beginnend – in 4er-Blöcke aufgeteilt. – Besteht die Dualzahl aus einer nicht durch 4 teilbaren Anzahl Bits, so wird vorne mit Nullen aufgefüllt. (11101 etwa wird somit zu 00011101 und dann aufgeteilt in die Blöcke 0001 und 1101.) – Anschließend wird jeder Block (bestehend aus vier Bits) separat in seine HexadezimalDarstellung transformiert. – In der ursprünglichen Reihenfolge der Blöcke ergibt die Konkatenation dieser Transformationen die Hexadezimaldarstellung der Ausgangszahl. (i) Beweisen Sie die Korrektheit dieses Verfahrens. (ii) Welche kleine Änderung müssten Sie an diesem Algorithmus vornehmen, um nach dem prinzipiell gleichen Verfahren eine Dual-Oktal-Transformation zu erhalten? (Ohne Beweis) Aufgabe 2: (H) Darstellung ganzer Zahlen (10 Pkt.) a. b. c. Geben Sie die folgenden Dezimalzahlen als Dualzahlen in ihrer 1er-Komplement-, 2er-Komplementund in Sign/Magnitude-Darstellung an (jeweils 10 Bit). Bei der Sign/Magnitude-Darstellung 8 wird das hochwertigste Bit als Vorzeichen interpretiert: (b9 ...b1 b0 )2 = (−1)b9 ∗ i=0 bi 2i (i) (123)10 (ii) (−123)10 Wandeln Sie folgende Dualzahlen in ihre Dezimaldarstellung um. Interpretieren Sie die Dualzahlen jeweils als in 1er- und 2er-Komplement-Darstellung sowie in Sign/MagnitudeDarstellung gegeben. (i) (1111101011)2 (ii) (0001011010)2 Geben Sie jeweils in 1er- und 2er-Komplement-Darstellung und in Sign/Magnitude-Darstellung bei Verwendung von 10 Bits an: (i) die größte darstellbare positive Zahl, (ii) die kleinste darstellbare positive Zahl, (iii) die größte darstellbare negative Zahl (d.h. die negative Zahl, die den geringsten Abstand zur Null hat), (iv) die kleinste darstellbare negative Zahl (d.h. die negative Zahl, die den größten Abstand zur Null hat), (v) die Zahl Null. d. Addieren Sie die Dualzahlen aus b) (als 2er-Komplement-Darstellung interpretiert), und geben Sie das Ergebnis an. e. Subtrahieren Sie die Dualzahlen aus b) (als 2er-Komplement-Darstellung interpretiert), und geben Sie das Ergebnis an. f. Subtrahieren Sie die Dualzahlen (0011001001)2 und (0100000101)2 (wieder als 2er-KomplementDarstellung interpretiert), und geben Sie das Ergebnis an. g. Woran erkennt man, wenn bei einer Addition in 2er-Komplement-Darstellung ein Überlauf stattgefunden hat? h. Überlegen Sie sich ein Verfahren zur Multiplikation von Dualzahlen in 2er-KomplementDarstellung. i. Gibt es einen Unterschied zwischen „2er-Komplement“ und „2er-Komplement-Darstellung“? Wenn ja, welchen? Aufgabe 3: (H) Ein kleines Rätsel (2 Pkt.) Zwei Freunde, Tim und Tom, streiten sich. Tim sagt: „Alle ganzen Zahlen größer als Null, die durch Sechs teilbar sind, haben genau zwei Einser in ihrer Binärdarstellung.“ Tom widerspricht: „Das stimmt nicht, aber jede derartige Nummer hat eine gerade Anzahl Einser in ihrer Binärdarstellung."Wer hat Recht? Hinweis: Versuchen Sie, zu den Behauptungen Gegenbeispiele zu finden. Aufgabe 4: (K) Addition von Dualzahlen (4 Pkt.) Beantworten Sie folgende Fragen im Bezug auf die 2er-Komplement-Darstellung ganzer Zahlen: a. Geben Sie die größte und die kleinste darstellbare Zahl, sowie die Null bei Verwendung von 8 Bits an. b. Folgende Dualzahlen in 2er-Komplement-Darstellung sind gegeben: 10011100 und 10010010. c. (i) Addieren Sie die beiden Zahlen. (ii) Hat bei der Addition ein Überlauf (Overflow) stattgefunden? Begründen Sie kurz Ihre Antwort. Folgende Dualzahlen in 2er-Komplement-Darstellung sind gegeben: 10011100 und 01110110. Ohne Rechnung: Wird bei der Addition dieser Zahlen ein Überlauf stattfinden? Bitte begründen Sie Ihre Antwort. Aufgabe 5: (T) b-adische Darstellung (10 Pkt.) Beweisen Sie: Sei b ≥ 2 eine natürliche Zahl (Basis). Dann existiert für jede natürliche Zahl n ∈ + genau ein k ∈ und genau eine Folge c0 , . . . , ck ∈ {0, . . . , b − 1}, so dass gilt bk ≤ n < bk+1 n = k ci bi . i=0 In diesem Fall heißt die Folge [ck ck−1 . . . c0 ]b b-adische Darstellung von n oder Darstellung von n zur Basis b. Hinweise: Sie sollen Existenz und Eindeutigkeit sowohl von n als auch von c0 , . . . , ck zeigen. Der Beweis wird u.U. einfacher, wenn Sie dies getrennt zeigen. L UDWIG -M AXIMILIANS -U NIVERSITÄT M ÜNCHEN I NSTITUT FÜR I NFORMATIK P ROF. D R . H ANS J ÜRGEN O HLBACH Sommersemester 2006 Übungsblatt 2 28.04.2006 Technische Grundlagen der Informatik Abgabetermin: 08.05.2005, 12:00 Uhr s.t. Achtung: Geben Sie bei der Abgabe Ihrer Hausaufgaben immer die Nummer Ihrer Übungsgruppe, Ihren Namen und Ihre Matrikelnummer an. Lesen: Aufgabe 6: (H) Festkommazahlen a. (8 Pkt.) Geben Sie die Dezimaldarstellung der folgenden binären Festkommazahlen an. Alle Zahlen sind in 2er-Komplement-Darstellung angegeben, das hochwertigste Bit (ganz links) dient als Vorzeichen-Bit. (i) 001,000 (ii) 100,110 (iii) 101,100 (iv) 100,110 b. c. Addieren Sie folgende Festkommazahlen. Geben Sie dabei jeweils die binäre und dezimale Darstellung des Ergebnisses an. (i) 0001,0 + 0001,1 (ii) 1001,0 + 0001,1 (iii) 111,1 + 101,1 Welches ist die (i) größte positive, (ii) kleineste positive, (iii) größte negative und (iv) kleinste negative Zahl, die mit einer Festkommadarstellung mit drei Bits vor dem Komma und fünf Bits nach dem Komma dargestellt werden kann? Technische Grundlagen der Informatik – SS 2006, Übungsblatt 2 2 Aufgabe 7: (H) Gleitkommazahlen (9 Pkt.) In der folgenden Aufgabe wird die Darstellung einer Gleitkommazahl nach IEEE 754 Standard verwendet: (−1)S · (1 + Signifikant) · 2(Exponent−Bias) wobei der Standard – für das Vorzeichen S ein Bit, – für den Signifikanten (Mantisse) 23 Bit bei einfacher und 52 Bit bei doppelter Genauigkeit, – für den Exponenten 8 Bit bei einfacher und 11 Bit bei doppelter Genauigkeit reserviert und den Bias auf 127 = 28−1 − 1 bei einfacher bzw. auf 1023 = 211−1 − 1 bei doppelter Genauigkeit setzt. Geben Sie die Darstellung folgender Zahlen als Gleitkommazahl nach IEEE 754 in einfacher (32Bit) und doppelter (64-Bit) Genauigkeit an: a. (10, 5)10 b. (0, 1)10 c. (−2/3)10 Beispiel für die Zahl (10)10 : (10)10 = (1010)2 = (1.01)2 · 23 . Damit ist Single: Double: Sign 0 0 Exponent 1000 0010 1000 0000 010 Signifikant 0100 0000 0000 0000 0000 000 0100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 Aufgabe 8: (H) Bits und Bytes (5+1 Pkt.) Verschiedene Speichermedien besitzen unterschiedliche Kapazitäten. Im Folgenden sind einige weit verbreitete Speichermedien und mögliche Kapazitäten aufgeführt: i. Disketten: a) 720 KBytes, b) 1,44 MBytes ii. CD-ROMs/DVDs: a) 700 MBytes, b) 4,7 GBytes iii. Festplatten: a) 80 GBytes a. Konvertieren Sie für jedes Medium die Kapazität in α) Anzahl Bits, β) Anzahl Bytes, γ) Anzahl Kilobytes, δ) Anzahl Megabytes, ε) Anzahl Gigabytes und ϕ) Anzahl Terabytes. b. Ist eine solche Umrechnung jeweils sinnvoll? Aufgabe 9: (T) Zeichen-Kodierungen (3 Pkt.) Ein Buch wie C.S. French: Computer Science hat etwa 1.600.000 Zeichen. Welcher Bruchteil eines 64 MByte Speichers wird benötigt, um dieses Buch in a. 6-Bit BCD Code1 b. 7-Bit ASCII Code (d.h. 7 Bits werden zur Speicherung eines Zeichens benötigt.) c. 16-Bit Unicode zu speichern? 1 Binary Coded Decimals (BCD) wurden ursprünglich dazu verwendet Zahlen zu speichern (4 Bits pro Ziffer). Eine Erweiterung dieses Kodierverfahrens wurde dann verwendet um Ziffern und Zeichen zu speichern. In diesem Fall werden 6 Bits verwendet um eine Ziffer oder ein Zeichen zu speichern. LUDWIG -M AXIMILIANS -U NIVERSITÄT M ÜNCHEN I NSTITUT FÜR I NFORMATIK P ROF. D R . H ANS J ÜRGEN O HLBACH Sommersemester 2006 Übungsblatt 3 05.05.2006 Technische Grundlagen der Informatik Abgabetermin: 15.05.2005, 12:00 Uhr s.t. Achtung: Geben Sie bei der Abgabe Ihrer Hausaufgaben immer die Nummer Ihrer Übungsgruppe, Ihren Namen und Ihre Matrikelnummer an. Aufgabe 10: (K) Digitalisierung von Audio-Daten (2+2 Pkt.) Wenn man eine Sampling-Rate von 44.000 Samples pro Sekunde und eine Genauigkeit von 16 Bit annimmt, wie viele Minuten Stereo Musik passen dann auf eine a. CD-R (Kapazität 700 MB) b. DVD-R (Kapazität 4,7 GB), wenn man i. keine Parity-Bits verwendet ii. Hamming Fehlerkorrektur-Codes für 16-Bit Daten verwendet? Aufgabe 11: (H) Bunte Bilder (4 Pkt.) Manche Digitalkameras der 2-Megapixel-Klasse haben eine Auflösung von 1600 × 1280 Punkten (Pixeln). (Das bedeutet, ein Foto besteht aus 1600 × 1280 Punkten) a. b. c. Wie viel Speicher (in Bytes, KBytes und MBytes) wird benötigt, um ein unkomprimiertes Bild zu speichern, wenn (i) jedes Pixel nur schwarz oder weiß ist? (ii) für jedes Pixel 8-Bit Graustufen verwendet werden? (iii) für jedes Pixel drei (rot, grün und blau) 8-Bit Farbskalen verwendet werden? Wie viel Speicher (in MBytes bzw. GBytes) wird benötigt, um - ohne Kompression - eine Minute Film zu speichern, wenn die Kamera 25 Bilder pro Sekunde aufzeichnet? Geben Sie die Antwort wieder für (i) Schwarz-Weiß-Bilder, (ii) 8-Bit Graustufen-Bilder und (iii) 3*8 Bit-Farbbilder an. Wie viele Sekunden unkomprimierten Videos können auf einer CD-ROM mit 700 MByte Kapazität gespeichert werden? Antwort wieder für !"# $&%(')'+*-,,-.&/1032 42 "5"76 (i) Schwarz-Weiß-Bilder, (ii) 8-Bit Graustufen-Bilder und (iii) 3*8 Bit-Farbbilder. * Aufgabe 12: (T) Hamming Codes (6+6 Pkt.) Übertragung von Daten über physische Kanäle (Kabel etc.) ist fehleranfällig. Indem man ein einzelnes Bit, das Paritätsbit, zu jedem Datenpaket hinzufügt, kann man Ein-Bit-Fehler entdecken. Mit einem einzelnen Paritätsbit ist es allerdings nicht möglich herauszufinden welches Bit fehlerhaft ist. Wenn man also das fehlerhafte Bit erkennen möchte, benötigt man mehr Paritätsbits. Das folgende Verfahren wurde mit dem Ziel Ein-Bit Datenfehler, die durch unzuverlässige Übertragungskanäle verursacht wurden, zu erkennen und zu korrigieren. Der Trick besteht darin zusätzliche Paritätsbits in die Datenpakete einzufügen und so ein Hamming Codewort zu bilden. Das Hamming Codewort besteht aus den eigentlichen Datenbits, die übertragen werden sollen, und einigen Paraitätsbits, die an strategischen Punkten eingefügt wurden. Die Anzahl der benötigten Paritätsbits ist abhängig von der Anzahl der Datenbits: Daten Bits : 8 16 32 64 128 Paritäts-Bits: 4 5 6 7 8 Codewort : 12 21 38 71 136 bits Allgemein gilt: Für Daten den Länge 2n Bits werden n + 1 Paritätsbits eingefügt, um das Codewort zu bilden. Algorithmus: 1. Die Bits des Codeworts werden von 1 an nummeriert. Bit 1 (das am weitesten links stehende) ist das most significant bit. 2. Die Paritätsbits sind die Bits des Codeworts, deren Nummer eine Potenz von 2 ist, also 1,2,4,8, . . . Alle anderen Bits sind Datenbits. 3. Jedes Paritätsbit prüft mehrere genau festgelegte Bits des Codeworts, sich selbst eingeschlossen. Ein Bit des Codewortes kann von mehr als einem Paritätsbit geprüft werden. Ein Bit B wird von den Paritätsbits P1, P2, P3 . . . , Pk geprüft, wenn B = P1 + P2 + · · · + Pk ist. Beispiel: Bit 11 wird von den Paritätsbits 1,2 und 8 geprüft. Parity Bit Getestete Bits 1 : 1 3 5 2 : 2 3 6 4 : 4 5 6 8 : 8 9 10 16 : 16 17 18 4. 7 7 7 11 19 9 10 12 12 20 11 11 13 13 21 13 14 14 14 15 15 15 15 17 18 20 19 19 21 21 Die Paritätsbits werden so gesetzt, dass die Summe der geprüften Bits (sich selbst eingeschlossen) gerade ist. Beispiel: Um das 8-Bit Datenwort 1001 0110 zu kodieren, benötigen wir vier Paritätsbits; das Codewort ist also 12 Bits lang und sieht folgendermaßen aus: P P D P D D D P D D D D (P = Paritätsbit, D = Datenbit) Codewort : Parity Bit 1: Parity Bit 2: 1 ? ? 2 ? ? 3 1 1 1 4 ? 5 0 0 6 1 1 7 1 1 1 8 ? 9 10 11 12 0 1 1 0 0 1 1 1 ? = 1 damit Summe gerade ? = 1 damit Summe gerade !"# $&%(')'+*-,,-.&/1032 42 "5"76 Parity Bit 4: Parity Bit 8: Codewort : ? 1 1 1 0 0 0 1 6 1 1 ? 0 1 0 0 1 1 1 1 0 0 0 ? = 0 damit Summe gerade ? = 0 damit Summe gerade Fehlererkennung: a. Um einen Fehler zu erkennen und zu korrigieren berechnet man die Checksumme für jedes Paritätsbit. Wenn alle Checksummen gerade (bzw. ungerade) sind, dann ist das Codewort fehlerfrei. b. Identifiziere alle Paritätsbits mit fehlerhaften Checksummen. Bilde die Schnittmenge aller von nicht korrekten Paritätsbits geprüften Bits. Eliminiere alle Bits, die auch von korrekten Paritätsbits geprüft werden. Das fehlerhafte Bit bleibt übrig. Alternative Methode: Die Summe der Nummern der fehlerhaften Paritätsbits ergibt die Nummer des fehlerhaften Bits. Beispiel: Finde und korrigiere einen eventuell vorhandenen Fehler in dem Codewort 1100 0110 0110. Dieses 12-Bit Codewort hat vier Paritätsbits, Bits Nummer 1,2,4 und 8. Codewort: Parity Bit Parity Bit Parity Bit Parity Bit 1: 2: 4: 8: 1 1 1 2 1 1 3 0 0 0 4 0 0 5 0 0 6 1 1 1 0 7 1 1 1 1 8 0 0 9 0 0 0 10 1 1 11 1 1 1 1 1 12 0 :3 X :5 X 0 :2 0 :2 Die Prüfsummen der Bits 1 und 2 sind falsch. Die Schnittmenge der Bitlisten sind die Bits 3, 7 und 11, also ist eins von diesen fehlerhaft. Bit 11 wird auch von Bit 8 geprüft, dessen Checksumme korrekt ist, also ist auch Bit 11 OK. Bit 7 wird auch von Bit 4 geprüft, dessen Checksumme korrekt ist, also ist auch Bit 7 OK. Bit 3 wird nur von den Bits 1 und 2 geprüft, also ist Bit 3 falsch. Korrigiert: 1 8-Bit Daten: 1 1 1 0 0 0 1 1 1 1 0 0 0 1 1 1 1 0 0 Aufgaben: a. b. Kodieren Sie die folgenden 8-Bit Daten in 12-Bit Hamming Codes: (i) 1010 1110 (ii) 0101 0001 Dekodieren Sie die folgenden 12-Bit Codewörter. Wenn sie Fehler enthalten, identifizieren Sie das fehlerhafte Bit und korrigieren Sie den Fehler. Das Ergebnis muss ein 8-Bit Datenwort sein. (i) 1101 0110 0111 (ii) 1101 1110 0111 L UDWIG -M AXIMILIANS -U NIVERSITÄT M ÜNCHEN I NSTITUT FÜR I NFORMATIK P ROF. D R . H ANS J ÜRGEN O HLBACH Sommersemester 2006 Übungsblatt 4 12.05.2006 Technische Grundlagen der Informatik Abgabetermin: 22.05.2005, 12:00 Uhr s.t. Achtung: Der Abgabebetrieb der TGI wird ab Blatt 4 mit Hilfe des UniWorX-Abgabesystems (http://www.pst.ifi.lmu.de/uniworx/) abgewicklt. Mehr dazu auf der Vorlesungsseite. Schriftliche Abgaben im Briefkasten können danach leider nicht mehr berücksichtigt werden. Für Blatt 3 gilt dies noch nicht! Lesen: Aufgabe 13: (T) Datenübertragungsraten (6 Pkt.) Die maximale Datenübertragungsrate C (Bit/s) für einen verrauschten Kanal berechnet sich nach C = W log2 (1 + S/N). (1) Dabei ist W die Bandbreite in Hertz (Hz) und S/N der Signal-Rausch-Abstand (auch SignalRausch-Verhältnis [SRV], engl. signal-to-noise ratio [SNR]). Eine analoge Telefonleitung beispielsweise arbeitet typischerweise mit einer Bandbreite von ca. 3400Hz und einem Signal-Rausch-Abstand zwischen 12dB und 40dB. Berechnen Sie die maximale Datenübertragungsrate für a. Schallwellen (Bandbreite 22 kHz) b. Radiowellen (Bandbreite 40 MHz) c. Licht (Bandbreite 3000 MHz) und nehmen Sie dabei einen Signal-Rausch-Abstand von i. 3:1 ii. 20:1 iii. 250:1 an. Hinweis: log2 (x) = log10 (x) log10 (2) Aufgabe 14: (H) Übertragungsgeschwindigkeiten (5+5 Pkt.) Laserdrucker können gewöhnlich mindestens mit einer Auflösung von 300 dpi (Pixeln pro Zoll) horizontal und vertikal drucken. a. Wenn die Datenübertragung zum Drucker Pixel für Pixel bei 3*8-Bit Farben erfolgt, wie lange dauert dann die Übertragung einer 11*8 Zoll Farbseite zum Drucker bei Verwendung folgender Übertragungsmöglichkeiten? (Gehen Sie davon aus, dass die hier angegebenen Übertragungsraten verlustlos ohne Protokoll-Overhead ausgenutzt werden können.) Technische Grundlagen der Informatik – SS 2006, Übungsblatt 4 (i) 2 seriell mit 19,2 KBit/s (ii) parallel (standard) mit 115 KByte/s (iii) parallel (ECP/EPP) mit 1 MByte/s (iv) Wireless LAN mit 11 MBit/s (v) b. Fast Ethernet mit 100 MBit/s Nehmen Sie nun an, dass anstatt von Pixeln die 16-Bit Unicode Darstellung jedes Zeichens zusammen mit seinen Koordinaten auf der Seite übertragen wird. (i) Wie viele Bits werden für die Koordinaten benötigt, wenn man die volle Auflösung von 300 dpi ausnutzen will (d.h. wenn die horizontalen und vertikalen Koordinaten aller Pixel binär kodiert werden müssen)? (ii) Wie lange dauert es, eine Seite mit 50 Zeilen und 70 Zeichen pro Zeile an den Drucker zu übertragen, wenn die gleichen Übertragungsmöglichkeiten wie in der vorherigen Teilaufgabe zur Verfügung stehen? Aufgabe 15: (H) Einfache Boolesche Terme (16 Pkt.) Gegeben sind die Wahrheitstabellen aller möglichen Booleschen Funktionen mit zwei Variablen (hier zu einer Tabelle zusammengefasst): A 0 0 1 1 B 0 1 0 1 1 0 0 0 0 2 1 0 0 0 3 0 1 0 0 4 1 1 0 0 5 0 0 1 0 6 1 0 1 0 7 0 1 1 0 8 1 1 1 0 9 10 11 12 13 14 15 16 0 1 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 Schreiben Sie diese Funktionen als Terme. Verwenden Sie dazu ausschließlich UND (·), ODER (+) und NICHT (−). Aufgabe 16: (T) Terme vereinfachen (2 Pkt.) Vereinfachen Sie die folgenden Booleschen Terme so weit wie möglich. a. (A · −B) + (−B · −C) + (A · −C) + (−A · −B · −C) + (−A · B · −C) b. (A · B · −C · −D) + (−B · −C · D) + (A · C · −D) + (−A · B · −C · D) + (−A · −C · −D) + (A · −B · C) + (A · −B · −D) Aufgabe 17: (T) Minimierung mittels Karnaugh (6+6 Pkt.) Ein Karnaugh-Diagramm einer Booleschen Funktion f : Bn −→ B mit n ∈ {3, 4} ist eine graphische Darstellung der Funktionstafel von f durch eine 0-1-Matrix der Größe 2 × 4 für n = 3 bzw. 4 × 4 für n = 4, deren Spalten mit den möglichen Belegungen der Variablen x1 bzw. x1 und x2 und deren Zeilen mit den möglichen Belegungen der Variablen x3 bzw. x3 und x4 beschriftet sind. Die Reihenfolge der Beschriftung erfolgt dabei so, daß sich zwei zyklisch benachbarte Spalten oder Zeilen nur in genau einer Komponente unterscheiden. (Zyklisch benachbart heißt, daß auch obere und untere Zeile bzw. linke und rechte Spalte als benachbart angesehen werden.) Die Beschriftung erfolgt zyklisch benachbart, damit der Resolutionssatz für Boolesche Funktionen einfach anwendbar ist: a · b + a · −b = a Technische Grundlagen der Informatik – SS 2006, Übungsblatt 4 3 Beachte: Die Anordnung der Variablen ist frei, es muß lediglich die Nachbarschaftsbeziehung erfüllt sein und es müssen alle Kombinationen möglich sein. Zur späteren Identifikation der zu Resolutionsblöcken gehörenden Terme sollte die Beschriftung der Zeilen und Spalten wie folgt durchgeführt werden: Man bezeichne die Spalten bzw. Zeilen mit x, für welche die Variable x den Wert 1 annimmt, und die anderen mit −x. Minimieren Sie folgende Funktionen im Karnaugh-Diagramm. a. y1 = (x1 · x2 · x3 ) + (x1 · −x2 · x3 ) + (−x1 · −x2 · x3 ) + (−x1 · −x2 · −x3 ). b. y2 = (x1 ·x2 ·−x3 )+(x1 ·−x2 ·−x3 )+(−x1 ·−x2 ·−x3 )+(−x1 ·x2 ·−x3 )+(x1 ·−x2 ·x3 )+(x1 ·x2 ·x3 ). L UDWIG -M AXIMILIANS -U NIVERSITÄT M ÜNCHEN I NSTITUT FÜR I NFORMATIK P ROF. D R . H ANS J ÜRGEN O HLBACH Sommersemester 2006 Übungsblatt 5 19.05.2006 Technische Grundlagen der Informatik Abgabetermin: 29.05.2005, 12:00 Uhr s.t. Achtung: Zu jeder Aufgabe ist eine Datei abzugeben, deren Name eindeutig die bearbeitete Aufgabe kennzeichnet (z.B. Aufgabe-18.txt). Stellen Sie die Dateien in ein extra Verzeichnis (mit beliebigem Namen) und packen Sie dieses zu einem ZIPArchiv. Geben Sie dieses per UniWorx ab. Lesen: Aufgabe 18: (H) Terme vereinfachen (6 Pkt.) Vereinfachen Sie die folgenden Booleschen Terme so weit wie möglich: a. f = (A · C) + (A · B) + (A · −B · −C) + (−A · B · C) + (−A · B · −C) (Hinweis: es kann eine Darstellung gefunden werden, so dass f von C unabhängig ist) b. g = (−A · B · −C) + (−A · −B · −C · D) + (−A · −B · −C · −D) + (A · B · C · D) c. A · −C + A · (B =⇒ C) Aufgabe 19: (H) Boolesche Funktionen (2+2 Pkt.) Gegeben sei die boolesche Funktion f: f(a, b, c, d) = c · −a + d · −c · −b + −d · b · −a a. Geben Sie die DNF (disjunktive Normalform) von f an. b. Geben Sie die KNF (konjunktive Normalform) von f an. Aufgabe 20: (H) Getränkeautomat (8 Pkt.) Ein Getränkeautomat verlangt 50 Cent für eine Dose Cola. Der Automat nimmt 50 Cent, 1 und 2 Euro. Er kann genauso 50 Cent, 1 und 2 Euro als Wechselgeld herausgeben. a. Entwerfen Sie eine Wahrheitstabelle für die Eingaben in50Cent, in1Euro, in2Euro und die Ausgaben out50Cent, out1Euro, out2Euro. Eine 1 auf einer Ein/Ausgabeleitung soll bedeuten, dass eine entsprechende Münze eingeworfen bzw. ausgegeben wird. b. Entwerfen Sie ein Schaltbild für den Automaten. (Testen Sie den Entwurf mit dem Programm MMLogic/klogic. Abzugeben ist die MMLogic/klogic-Datei; im Namen der Datei muss erkennbar sein, ob es ein MMLogic- oder ein klogic-Dokument ist! Also z.B. Aufgabe-20-klogic.circuit) Technische Grundlagen der Informatik – SS 2006, Übungsblatt 5 Aufgabe 21: (T) Entwurf eines Taktgebers 2 (5+5 Pkt.) Entwerfen Sie einen Taktgeber für ein Flipflop: Bei einem Flipflop tritt eine Zustandsänderung ein, wenn das Taktsignal von 0 auf 1 bzw. von 1 auf 0 wechselt. Daher heißt ein Flipflop auch flankengesteuert. Der Taktgeber erhält als Input einen Pegel a (wechselt regelmäßig zwischen 0 und 1) und soll einen Output erzeugen, der als Taktgeber für einen Flipflop verwendet genau dann einen Zustandsübergang im Flipflop auslöst, wenn der Pegel a den Wert 1 hat. Geben Sie ein Impulsdiagramm für den Taktgeber an, um seine Arbeitsweise zu illustrieren. Hinweis: Überlegen Sie sich, welche Auswirkung es auf das Design hat, ob der Takt für ein Flipflop erzeugt wird, der nur bei steigender bzw. fallender Flanke des Taktes eine Zustandsänderung vollzieht. Aufgabe 22: (K) De Morgan (10 Pkt.) Gegeben sei das De Morgansche Gesetz: −(x1 ∨ x2 ) = −x1 ∧ −x2 Beweisen Sie mit vollständiger Induktion, dass das De Morgansche Gesetz auch für beliebig viele Terme n mit n ≥ 3: −(x1 ∨ ... ∨ xn ) = −x1 ∧ ... ∧ −xn gilt, oder geben Sie ein Gegenbeispiel an. L UDWIG -M AXIMILIANS -U NIVERSITÄT M ÜNCHEN I NSTITUT FÜR I NFORMATIK P ROF. D R . H ANS J ÜRGEN O HLBACH Sommersemester 2006 Übungsblatt 6 26.05.2006 Technische Grundlagen der Informatik Abgabetermin: 06.06.2005, 12:00 Uhr s.t. Achtung: Zu jeder Aufgabe ist eine Datei abzugeben, deren Name eindeutig die bearbeitete Aufgabe kennzeichnet (z.B. Aufgabe-18.txt). Stellen Sie die Dateien in ein extra Verzeichnis (mit beliebigem Namen) und packen Sie dieses zu einem ZIPArchiv. Geben Sie dieses per UniWorx ab. Für die Aufgaben, in denen Schaltnetze zu entwerfen sind, geben Sie bitte ein klogic- oder MMlogic-Dokument mit dem geforderten Netz ab. Wie bereits bei Blatt 5 gilt: Aus dem Dateinamen muß klar ersichtlich sein, ob es ein klogic- oder MMlogic-Dokument ist. Lesen: Aufgabe 23: (H) Entwurf eines Schaltnetzes (1+1+2 Pkt.) In einer Gefahrenmeldeanlage sollen drei Gefahrentypen durch drei Lämpchen angezeigt werden. Spricht nur einer der drei Melder (a, b, c) an, soll die gelbe Lampe G leuchten (G = 1). Melden zwei Melder gleichzeitig, soll die orange Lampe O leuchten (O = 1) und nur wenn alle drei Melder Alarm geben, soll die rote Lampe R aufleuchten (R = 1). a. Stellen Sie die Funktionstabelle der Gefahrenmeldeanlage auf. b. Geben Sie eine Funktionsgleichung der gelben Lampe an. c. Zeichnen Sie ein Schaltbild für den Ausgang G. Testen Sie den Entwurf mit dem Programm MMLogic/klogic. Abzugeben ist die MMLogic/klogic-Datei. Aufgabe 24: (H) Boolesche Funktionen Gegeben ist folgendes Schaltnetz: 0 1 a 0 b 3 1 2 2−MUX a. c d Stellen Sie die boolesche Funktion y=f(a,b,c,d) auf. b. (26 Pkt.) Gegeben ist folgendes Karnaugh-Diagramm: y Technische Grundlagen der Informatik – SS 2006, Übungsblatt 6 2 ac ac ac ac bd 1 0 1 1 bd 1 0 1 1 bd 0 0 1 0 bd 0 0 1 1 (i) Geben Sie die DNF (disjunktive Normalform) dieser Funktion an. (ii) Minimieren Sie die Funktion grafisch. Fassen sie dabei möglichst viele Felder zusammen. (iii) Geben Sie die minimierte Funktion an. c. Gegeben ist folgende boolesche Funktion: f(a, b, c) = (− (a ∨ b) ∧ c) ∨ −d Entwerfen Sie das Schaltnetz zu dieser Funktion mit den elementaren Gattern UND, ODER, NICHT. Aufgabe 25: (T) Entwurf eines Schaltnetzes (2+2+3+3 Pkt.) Der in der folgenden Aufgabe beschriebene Sachverhalt gilt nicht für das laufende Semester! Wie Sie wissen, wird zur TGI-Klausur nur zugelassen, wer von drei korrigierten Übungsblättern bei mindestens zwei Blättern die erforderliche Mindestpunktzahl erreicht hat. Dies soll durch ein Schaltnetz dargestellt werden. Dazu werden drei Melder (a, b, c) vorgesehen, die genau dann ansprechen, wenn die Punktzahl für das jeweilige Übungsblatt erreicht ist. Spricht am Ende des Semesters kein oder nur ein Melder an, so soll eine rote Lampe R leuchten (R = 1). Sprechen zwei Melder an, soll eine orange Lampe O leuchten (O = 1). Und nur wenn alle drei Melder ansprechen, soll eine grüne Lampe G leuchten (G = 1). a. Stellen Sie die Funktionstabelle für eine solche Anlage auf. b. Geben Sie die Funktionsgleichung für die rote Lampe an. c. Zeichnen Sie das Schaltbild für den Ausgang R. d. Realisieren Sie die Boolesche Funktion f(a, b, c) = a ∧ b ∨ a ∧ c ∨ b ∧ c durch einen Multiplexer. Aufgabe 26: (K) Zeitverhalten (2+3+3 Pkt.) Gegeben sei das folgende Schaltnetz, wobei die beiden Gatter jeweils eine Laufzeit von 1 ns haben. Technische Grundlagen der Informatik – SS 2006, Übungsblatt 6 3 E A Im folgenden Zeitdiagramm ist der Verlauf des Eingangssignals E dargestellt: E A B 1 2 3 4 5 6 7 8 9 10 11 12 Zeit (ns) a. Vervollständigen Sie den Verlauf des Ausgangssignals A im Zeitintervall zwischen 3 ns und 12 ns. b. Der Verlauf des Ausgangssignals A weißt einen Hazardfehler auf. Wodurch ist dieser Fehler bedingt? Begründen Sie ihre Antwort. Wie könnte man ihn beseitigen? c. Zeichnen Sie ein Schaltnetz, das am Ausgang das Signal B erzeugt, wenn das Signal E am Eingang anliegt. Als Gatter stehen Ihnen zwei Inverter und ein NAND-Gatter mit zwei Eingägngen zur Verfügung. Die Gatter haben jeweils eine Laufzeit von 1 ns. L UDWIG -M AXIMILIANS -U NIVERSITÄT M ÜNCHEN I NSTITUT FÜR I NFORMATIK P ROF. D R . H ANS J ÜRGEN O HLBACH Sommersemester 2006 Übungsblatt 7 02.06.2006 Technische Grundlagen der Informatik Abgabetermin: 12.06.2005, 12:00 Uhr s.t. Achtung: Zu jeder Aufgabe ist eine Datei abzugeben, deren Name eindeutig die bearbeitete Aufgabe kennzeichnet (z.B. Aufgabe-18.txt). Stellen Sie die Dateien in ein extra Verzeichnis (mit beliebigem Namen) und packen Sie dieses zu einem ZIPArchiv. Geben Sie dieses per UniWorx ab. Für die Aufgaben, in denen Schaltnetze zu entwerfen sind,geben Sie bitte ein klogic- oder MMlogic-Dokument, das das geforderte Netz enthält ab. Wie bereits bei Blatt 5 gilt: Aus dem Dateinamen muß klar ersichtlich sein, ob es ein klogic- oder MMlogic-Dokument ist. Lesen: Aufgabe 27: (H) Minimierung einer Schaltfunktion (4+4+1+4+3 Pkt.) Betrachten Sie ein Schaltnetz mit den Eingängen x3 bis x0 , die eine vierstellige Dualzahl repräsentieren sollen. (x3 ist dabei das hochwertigste Bit.) Das resultierende Schaltnetz soll so entworfen werden, dass immer dann am Ausgang y eine 1 erscheint, wenn die Eingangskombination nicht durch 4 teilbar ist (Beachten Sie: 0 ist durch 4 teilbar). Dazu sind die folgenden Schritte sinnvoll: a. Stellen Sie die Wahrheitstabelle auf. b. Leiten Sie aus der Wahrheitstabelle die Schaltfunktion sowohl in disjunktiver Normalform (DNF), als auch in konjunktiver Normalform (KNF) her. c. Welche der beiden Darstellungen (DNF oder KNF) ist günstiger? Begründen Sie ihre Aussage. d. Minimieren Sie rechnerisch die geeignetere Darstellung der Schaltfunktion unter Anwendung der Ihnen aus der Vorlesung bekannten Regeln. e. Zeichnen Sie das zugehörige Schaltbild. Abzugeben ist das zugehörige Schaltbild (als MMLogic/klogic-Dokument). Aufgabe 28: (H) Imaginäre Maschine: ggT (10 Pkt.) Euklid hat ein einfaches Verfahren zur Bestimmung des ggT zweier natürlicher Zahlen a und b beschrieben: – Setze m = a und n = b. – Ist m < n, so vertausche m und n. – Berechne r = m − n. – Setze m = r, lasse n unverändert. Technische Grundlagen der Informatik – SS 2006, Übungsblatt 7 – Falls r 6= 0, so fahre fort mit Schritt 2. – Ist r = 0, dann ist der ggT m (und gleichermaßen n). 2 (Nach Wikipedia, http://www.wikipedia.de, leicht modifiziert) Schreiben Sie ein Programm für die imaginäre Maschine, dass für zwei natürliche Zahlen a und b den größten gemeinsamen Teiler nach dem Verfahren von Euklid berechnet. Kommentieren Sie Ihr Progamm ausführlich! Für die Abgabe speichern Sie das Programm im iMachine-Interpreter in einer Datei und geben Sie diese ab. Aufgabe 29: (T) Imaginäre Maschine: ggT mit Unterprogrammaufruf (18 Pkt.) Ein etwas effizienteres Verfahren zur Berechnung des größten gemeinsamen Teilers zweier natürlicher Zahlen geht ebenfalls auf Euklid zurück: – Dividiere die größere der beiden Zahlen durch die kleinere. – Ist der Rest der Division 0, dann ist der ggT der Divisor. Sonst setze die größere der beiden Zahlen durch den Rest. Weiter mit dem ersten Schritt. (Nach Wikipedia, http://www.wikipedia.de) Schreiben Sie ein Programm für die imaginäre Maschine, dass für zwei natürliche Zahlen a und b den größten gemeinsamen Teiler nach dem effizienteren Verfahren von Euklid berechnet. Dabei soll die Division mit Rest als ein Unterprogramm realisiert werden. Die Parameterübergabe an das Unterprogramm soll mit Hilfe eines Stack realisiert werden. L UDWIG -M AXIMILIANS -U NIVERSITÄT M ÜNCHEN I NSTITUT FÜR I NFORMATIK P ROF. D R . H ANS J ÜRGEN O HLBACH Sommersemester 2006 Übungsblatt 8 09.06.2006 Technische Grundlagen der Informatik Abgabetermin: 19.06.2005, 12:00 Uhr s.t. Achtung: Zu jeder Aufgabe ist eine Datei abzugeben, deren Name eindeutig die bearbeitete Aufgabe kennzeichnet (z.B. Aufgabe-18.txt). Stellen Sie die Dateien in ein extra Verzeichnis (mit beliebigem Namen) und packen Sie dieses zu einem ZIPArchiv. Geben Sie dieses per UniWorx ab. Lesen: Aufgabe 30: (H) Imaginäre Maschine: Zweierpotenz (8 Pkt.) Schreiben Sie ein Programm für die imaginäre Maschine, das überprüft, ob eine positive Zahl x eine Potenz der Zahl 2 ist (es muss x = 2i mit 0 < i < 15 gelten; die größte darstellbare Zweierpotenz in der imaginären Maschine ist 214 .) Falls die Zahl eine Potenz von 2 ist, soll das Programm 1 ausgeben, 0 sonst. Hinweise: – Überlegen Sie sich dazu, welche Eigenschaften Binärzahlen, die Zweierpotenzen darstellen haben, und wie sie eine dieser Eigenschaften zur Lösung der Aufgabe verwenden können. – Die Befehle AND und OR der imaginären Maschine sind für diese Aufgabe hilfreich (in der minimalen Lösung genügt ein einzige Anwendung von einem der beiden Befehle – selbstverständlich mit einigen anderen Kommandos). Kommentieren Sie Ihr Progamm ausführlich! Für die Abgabe speichern Sie das Programm im iMachine-Interpreter in einer Datei und geben Sie diese ab. Aufgabe 31: (H) SPIM Programmieraufgabe (12 Pkt.) Erstellen Sie ein vollständiges SPIM–Programm, das folgendes durchführt: • Es werden zwei positive Integer–Zahlen von der Konsole eingelesen. • Es wird der Durchschnitt dieser beiden Zahlen auf eine Nachkommastelle genau berechnet. • Das Ergebnis der Berechnung wird ausgegeben. Tipp: Programmieren Sie diejenigen Schritte, die Sie auch beim handschriftlichen Dividieren durchführen! Beachten Sie hierbei folgendes: • Verwenden Sie nur die unten aufgeführten Befehle. • Verwenden Sie für die Vorkommazahl das Register $s0 und für die Nachkommazahl das Register $s1, ansonsten nur die temporären Register. Technische Grundlagen der Informatik – SS 2006, Übungsblatt 8 2 • Kommentieren Sie ihr Programm sinnvoll! • Sowohl die Eingabe als auch die Ausgabe soll mit einem Anweisungstext versehen werden, wie z.B. ”Geben Sie die 1. Zahl ein: ”, etc. • Die Ausgabe des Ergebnisses soll das Komma enthalten. SPIM Assemblerbefehle Befehl add addu addi addiu div rem mul b j jal jr beq beqz bne bnez bge bgeu bge bgt bgtu bgtz ble bleu blez blt bltu bltz syscall move la lb lw li sw Argumente Rd, Rs1, Rs2 Rd, Rs1, Rs2 Rd, Rs1, Imm Rd, Rs1, Imm Rd, Rs1, Rs2 Rd, Rs1, Rs2 Rd, Rs1, Rs2 label label label Rs Rs1, Rs2, label Rs, label Rs1, Rs2, label Rs1, label Rs1, Rs2, label Rs1, Rs2, label Rs, label Rs1, Rs2, label Rs1, Rs2, label Rs, label Rs1, Rs2, label Rs1, Rs2, label Rs, label Rs1, Rs2, label Rs1, Rs2, label Rs, label Rd, Rd, Rd, Rd, Rd, Rs, Rs label Adr Adr Imm Adr Funktion print_int print_float print_double print_string read_int Wirkung Rd := Rs1 + Rs2 Rd := Rs1 + Rs2 Rd := Rs1 + Imm Rd := Rs1 + Imm Rd := Rs1 DIV Rs2 Rd := Rs1 MOD Rs2 Rd := Rs1 × Rs2 Sprung nach label Sprung nach label unbedingter Sprung nach label unbedingter Sprung an die Adresse in Rs Sprung, falls Rs1 = Rs2 Sprung, falls Rs = 0 Sprung, falls Rs1 6= Rs2 Sprung, falls Rs1 6= 0 Sprung, falls Rs1 ≥ Rs2 Sprung, falls Rs1 ≥ Rs2 Sprung, falls Rs ≥ 0 Sprung, falls Rs1 > Rs2 Sprung, falls Rs1 > Rs2 Sprung, falls Rs > 0 Sprung, falls Rs1 ≤ Rs2 Sprung, falls Rs1 ≤ Rs2 Sprung, falls Rs ≤ 0 Sprung, falls Rs1 < Rs2 Sprung, falls Rs1 < Rs2 Sprung, falls Rs < 0 führt Systemfunktion aus Rd := Rs Adresse des Labels wird in Rd geladen Rd := MEM[Adr] Rd := MEM[Adr] Rd := Imm MEM[Adr] := Rs Code in $v0 1 2 3 4 5 Funktion read_float read_double read_string sbrk exit Code in $v0 6 7 8 9 10 Technische Grundlagen der Informatik – SS 2006, Übungsblatt 8 Aufgabe 32: (H) Mystery-Funktion 3 (4 Pkt.) Analysieren Sie das folgende Programmfragment: # Eingabe: Integerzahl in $a0 # Ausgabe: Integerzahl in $a0 2 mystery: 4 6 8 10 12 move move label1: andi beqz addu label2: addu srl bne move # EXIT $t0, $t1, $t2, $t2, $t1, $t0, $a0, $t0, $a0, $zero $zero $a0, 1 label2 $t1, 1 $t0, 1 $a0, 1 32, label1 $t1 Welche Funktion hat dieses Unterprogramm? Aufgabe 33: (K) Implementation bcp (4+2+2 Pkt.) Sie sollen eine neue Instruktion implementieren: Block-copy, bcp. Diese Anweisung soll einen Block von Wörtern von einer Adresse zu einer anderen kopieren. Nehmen Sie an, daß diese Anweisung die Startadresse der Quelle in Register $t1, die Startadresse des Ziels in Register $t2 und die Anzahl der zu kopierenden Wörter in $t3 (≥ 0). Nehmen Sie weiterhin an, daß die Werte in diesen Registern genauso wie das in Register $t4 während der Ausführung der Anweisung zerstört werden dürfen. a. Schreiben Sie ein MIPS-Programm, daß diese Anweisung implementiert. b. Wieviele Anweisungen werden ausgeführt, um eine 100-Wort Blockkopie durchzuführen? L UDWIG -M AXIMILIANS -U NIVERSITÄT M ÜNCHEN I NSTITUT FÜR I NFORMATIK P ROF. D R . H ANS J ÜRGEN O HLBACH Sommersemester 2006 Übungsblatt 8 16.06.2006 Technische Grundlagen der Informatik Abgabetermin: 26.06.2005, 12:00 Uhr s.t. Achtung: Zu jeder Aufgabe ist eine Datei abzugeben, deren Name eindeutig die bearbeitete Aufgabe kennzeichnet (z.B. Aufgabe-18.txt). Stellen Sie die Dateien in ein extra Verzeichnis (mit beliebigem Namen) und packen Sie dieses zu einem ZIPArchiv. Geben Sie dieses per UniWorx ab. Lesen: Aufgabe 34: (H) Umsetzung boolscher Ausdrücke (4 Pkt.) Übersetzen Sie das folgende Programmfragment in MIPS-Code ($t0 enthalte die Variable a). IF (a < 0) OR (a > 99) THEN a := a - 10; ELSE a := a - 1; END; 2 4 Bedenken Sie dabei insbesondere: Der Ausdruck a > 99 wird nur dann ausgewertet, wenn a < 0 nicht wahr ist. Aufgabe 35: (H) Fakultät iterativ und rekursiv (16 Pkt.) Schreiben Sie ein vollständiges SPIM-Programm, dass die Fakultätsfunktion mit folgendem iterativen (in Pseudocode angegebenen) Algorithmus berechnet: – 2 4 6 8 FUN fak(n) = IF (n < 0) THEN RETURN -1; INT result := 1; WHILE (n > 0) result := result * n; n := n - 1; END RETURN result; Der Parameter n soll von der Konsole gelesen werden. Es genügt, das RETURN als Ausgabe auf der Konsole mit anschließendem Beenden des Programms zu realisieren. Schreiben Sie ein vollständiges SPIM-Programm, dass die Fakultätsfunktion mit folgendem rekursiven (in Pseudocode angegebenen) Algorithmus berechnet: – 2 4 6 FUN fak(n) = IF (n < 0) THEN RETURN -1; ELSE IF (n == 0) THEN RETURN 1; ELSE RETURN n * fak(n-1); Technische Grundlagen der Informatik – SS 2006, Übungsblatt 8 2 Auch hier soll der Wert n von der Konsole gelesen werden und das Ergebnis dort ausgegeben werden. Implementieren Sie den rekursiven Algorithmus mit Hilfe einer Prozedur und achten Sie dabei insbesondere auf eine korrekte Realisierung des Prozeduraufrufs nach den MIPSProzedur-Konventionen (siehe auch SPIM-Tutorial auf der Vorlesungswebseite). Aufgabe 36: (T) Mehrdimensionale Felder (5+10+2 Pkt.) Sei die folgende Typdefinition für ein mehrdimensionales Feld gegeben: TYPE T = ARRAY I1, I2, ..., Ik OF T0. T0 heißt Grundtyp des Felds, I1 bis Ik heißen die k Indextypen des Felds (endliche Untermengen der natürlichen Zahlen), ihre Kardinalitäten seien durch s1 bis sk bezeichnet. Mit LOP (length of operand ) bezeichnet man die Länge des Grundtyps T0 in Byte. Die Selektion einzelner Elemente erfolgt durch Angabe konkreter Werte für sämtliche Indizes, z.B. a[i1, ..., ik], in konstanter Zeit. Beispiel: Betrachten Sie die folgende Deklaration der Feldvariablen A: VAR A = ARRAY[0..5,0..78,0..42] OF INTEGER. Hier ist INTEGER der Grundtyp, mit LOP = 4 (für einen Rechner mit 32-Bit Integerzahlen), die Indextypen sind I1 = [0..5], I2 = [0..78] und I3 = [0..42], ihre Kardinalitäten also 6, 79 bzw. 43. Man beachte, daß die untere bzw. obere Grenze der Indextypen konstant sein müssen (da sonst die Adressberechnung nicht mehr in konstanter Zeit garantiert werden kann). Unter diesen Voraussetzungen bearbeiten Sie die folgenden Aufgaben: a. Überlegen Sie sich, wie sie das dreidimensionale Feld aus dem Beispiel geschickt auf einen linearen Speicher abbilden können. Nehmen Sie an, daß die Anfangsadresse des Felds 4000 sei. Berechnen Sie die Adresse des Elements A[3,13,42]. b. Überlegen Sie sich, wie ein mehrdimensionales Feld derartig (mit Hilfe einer Adressfunktion) auf einen linearen Speicher abgebildet werden kann, daß der wahlfreie Zugriff auf die Elemente des Felds in konstanter Zeit möglich ist. Erläutern Sie die Idee ihrer Adressfunktion. Hinweis: Sie können davon ausgehen, daß die unteren Grenzen aller Indextypen 0 sind. c. Was müssen Sie an ihrer Adressfunktion verändern, wenn nicht alle unteren Grenzen der Indextypen 0 sind? L UDWIG -M AXIMILIANS -U NIVERSITÄT M ÜNCHEN I NSTITUT FÜR I NFORMATIK P ROF. D R . H ANS J ÜRGEN O HLBACH Sommersemester 2006 Übungsblatt 10 23.06.2006 Technische Grundlagen der Informatik Abgabetermin: 03.07.2006, 12:00 Uhr s.t. Achtung: Zu jeder Aufgabe ist eine Datei abzugeben, deren Name eindeutig die bearbeitete Aufgabe kennzeichnet (z.B. Aufgabe-18.txt). Stellen Sie die Dateien in ein extra Verzeichnis (mit beliebigem Namen) und packen Sie dieses zu einem ZIPArchiv. Geben Sie dieses per UniWorx ab. Lesen: Aufgabe 37: (H) 2er-Komplement-Darstellung (10 Pkt.) Schreiben Sie ein MIPS-Assembler-Programm, das eine positive oder negative Dezimalzahl einliest und ihre Binärdarstellung unter Verwendung der 2er-Komplement-Darstellung ausgibt. Testen Sie Ihr Programm mit den Eingaben 25 und -25. Aufgabe 38: (H) Addition mit doppelter Genauigkeit (10 Pkt.) Wie lautet die kürzeste Abfolge von MIPS-Befehlen, um Integeraddition mit doppelter Genauigkeit zu realisieren. Nehmen Sie dazu an, daß die eine 64-Bit Ganzzahl (im Zweierkomplement) in den Registern $t4 und $t5, die andere in den Registern $t6 und $t7 abgelegt werden. Die Summe soll in die Register $t2 und $t3 geschrieben werden. Nehmen Sie weiterhin an, daß das höchstwertige Wort der 64-Bit Ganzzahl in den geraden, das niedrigstwertige Wort in den ungeraden Registern liege. Hinweis: Es genügen vier Instruktionen. Aufgabe 39: (P) Hexadezimal-Darstellung (10 Pkt.) Schreiben Sie ein MIPS-Programm, das eine positive Dezimalzahl einliest und sie in Hexadezimaldarstellung wieder ausgibt. Aufgabe 40: (P) CASE-Anweisung (4 Pkt.) Schreiben Sie ein MIPS-Programm zur Realisierung der folgenden CASE-Anweisung: VAR i: INTEGER; 2 4 6 8 CASE i OF 1: k := 2: k := 3: k := 4: k := ELSE: k END; 1; 2; 3; 4; := break; break; break; break; 999; break; Überlegen Sie sich dazu ein generelles Verfahren zur Implementierung komplexer CASE-Anweisungen. Hinweis: Beachten Sie, dass die einzelnen CASE-Blöcke nicht gleich lang sein müssen. L UDWIG -M AXIMILIANS -U NIVERSITÄT M ÜNCHEN I NSTITUT FÜR I NFORMATIK P ROF. D R . H ANS J ÜRGEN O HLBACH Sommersemester 2006 Übungsblatt 11 30.06.2006 Technische Grundlagen der Informatik Abgabetermin: 10.07.2006, 12:00 Uhr s.t. Achtung: Zu jeder Aufgabe ist eine Datei abzugeben, deren Name eindeutig die bearbeitete Aufgabe kennzeichnet (z.B. Aufgabe-18.txt). Stellen Sie die Dateien in ein extra Verzeichnis (mit beliebigem Namen, allerdings ohne Sonderzeichen und Umlaute) und packen Sie dieses zu einem ZIP-Archiv. Geben Sie dieses per UniWorx ab. Lesen: Aufgabe 41: (H) Stringmanipulation (10 Pkt.) Schreiben Sie ein SPIM-Programm, dass eine Zeichenkette einliest, diese zeichenweise durchläuft und jeden vorkommenden Kleinbuchstaben durch den entsprechenden Großbuchstaben ersetzt, alle anderen Zeichen aber unverändert läßt. Das Programm soll den modifizierten String auf der Konsole ausgeben. Hinweise: Auf UNIX-Systemen können Sie sich eine Übersicht über die ASCII-Codes mit man ascii anzeigen lassen, im Internet kann man z.B. unter www.asciitable.com nachschlagen. Die eigentliche Konversion von Klein- auf Großbuchstabe kann durch Subtraktion einer Konstante realisiert werden. Aufgabe 42: (H) Unterprogramme und Stack (5+2+3+3 Pkt.) Zur Beantwortung der folgenden Fragen lesen Sie bitte (wenn nicht schon geschehen) die Kapitel 12 und 13 im SPIM-Tutorial. a. Welche der folgenden Aussagen zum MIPS-Simulator sind korrekt? (i) Der Stack wächst mit geringer werdenden Hauptspeicheradressen in Richtung der Adresse 0. (ii) Da sich Programmcode und Stack einen gemeinsamen Speicher teilen und der Stack in Richtung des Programmcodes wächst, ist es theoretisch möglich, dass der Stack in das Programm hineinwächst (führt zum Abbruch). (iii) Der Stackpointer $sp zeigt auf das Wort, das zuletzt in den Stack geladen wurde. (iv) Neben der Realisierung von Unterprogramm- und Prozeduraufrufen eignet sich der Stack wegen seiner dynamischen Zellbreite auch, um Daten zu speichern, für die die statische Breite der Register (32 Bit) nicht ausreicht. (v) b. Nach der MIPS-Konvention für Unterprogrammaufrufe gehört das Register $ra zu den Callee-saved-Registern. Zeichnen Sie den Stack, wie er nach der Ausführung des folgenden MIPS-Codefragments aussieht. Tragen Sie auch den Stackpointer in Ihre Skizze ein. Welches Problem liegt vor? Technische Grundlagen der Informatik – SS 2006, Übungsblatt 11 2 4 c. $t0, $t0, $t0, $t0, 1 ($sp) 2 ($sp) Wie sieht der Stack nach der Ausführung der folgenden Befehlssequenz aus? Welche Adresse hat die Speicherzelle, auf die der Stackpointer zeigt? 2 4 6 8 d. li sw li sw 2 li li li addi sw sw sw sw sw $t0, $t1, $t2, $sp, $t0, $t0, $t0, $t1, $t2, 1 2 3 -20 20($sp) 16($sp) 12($sp) 8($sp) 4($sp) Erklären Sie kurz den Unterschied zwischen call by value und call by reference. Verdeutlichen Sie ihn an einem selbst gewählten Beispiel in Assembler-Syntax. Aufgabe 43: (P) Codierung (6 Pkt.) Eine sehr einfache Form der Verschlüsselung verknüpft jeweils ein Byte einer Zeichenkette und ein Bitmuster mit der logischen Funktion exklusiv-oder. Eine Verknüpfung des Ergebnisses mit demselben Bitmuster liefert die ursprüngliche Zeichenkette. Schreiben Sie ein SPIM-Programm, dass eine 8-Bit-Integerzahl als Schlüssel und eine Zeichenkette einliest. Anschließend sollen der Reihe nach jeweils ein Byte der Eingabe mit dem Schlüssel exklusiv-oder verknüpft , zu einem neuen String zusammengefügt und schließlich auf der Konsole ausgegeben werden. Entschlüsseln Sie mit diesem Verfahren die Zeichenkette aCBCM@\DMNIX& die mit dem Schlüssel 44 codiert wurde. Wie lautet sie? Aufgabe 44: (P) Matrizenmultiplikation (2+4+6+1 Pkt.) Das Produkt einer n × m-Matrix A mit einer m × p-Matrix B ergibt eine n × p-Matrix C mit (für i = 1, . . . , n und j = 1, . . . , p) m X Aik · . . . · Bkj Cij = k=1 a. Geben Sie ein Programm in einer Ihnen geläufigen Hochsprache an, welches das Produkt der durch die Felder A und B dargestellten Matrizen berechnet und im Feld C ablegt. Dabei können Sie voraussetzen, daß die Ausgangsmatrizen bereits in A und B eingelesen wurden. b. Schreiben Sie ein MIPS-Unterprogramm, das die Berechnung der Adresse eines Feldelements eines n-dimensionalen Feldes übernimmt. Verwenden Sie die im Tutorium dargestellten Konventionen für Unterprogrammaufrufe. Als Parameter soll das Unterprogramm die Adresse eines Felddeskriptors erhalten, der das jeweilige Feld ausreichend beschreibt. Außerdem wird dem Unterprogramm die Adresse des ersten von n aufeinanderfolgend abgespeicherten Indexwerten übergeben. Die Berechnung der Adressen soll über die „fiktive Anfangsadresse“ a0 erfolgen. Technische Grundlagen der Informatik – SS 2006, Übungsblatt 11 3 c. Schreiben Sie ein MIPS-Programm, das dem gerade erstellten hochsprachlichen Programm zur Matrizenmultiplikation entspricht. Führen Sie die Adreßrechnung für die verwendeten Felder mit Hilfe des in Teilaufgabe (b) entwickelten Unterprogramms durch. d. Erweitern Sie Ihr Programm um ein MIPS-Unterprogramm, das eine durch einen Felddeskriptor gegebene Matrix formatiert auf der Konsole ausgibt. e. Testen Sie Ihr MIPS-Programm mit der Matrixmultiplikation −2 4 1 3 2 1 −2 5 −2 −1 · 3 3 1 −6 −1 −3 −1 3 Geben Sie die Ergebnismatrix an. L UDWIG -M AXIMILIANS -U NIVERSITÄT M ÜNCHEN I NSTITUT FÜR I NFORMATIK P ROF. D R . H ANS J ÜRGEN O HLBACH Sommersemester 2006 Übungsblatt 12 07.07.2006 Technische Grundlagen der Informatik Abgabetermin: 17.07.2006, 12:00 Uhr s.t. Achtung: Zu jeder Aufgabe ist eine Datei abzugeben, deren Name eindeutig die bearbeitete Aufgabe kennzeichnet (z.B. Aufgabe-18.txt). Stellen Sie die Dateien in ein extra Verzeichnis (mit beliebigem Namen, allerdings ohne Sonderzeichen und Umlaute) und packen Sie dieses zu einem ZIP-Archiv. Geben Sie dieses per UniWorx ab. Hinweis: Die Aufgaben 45 und 46 dienen zur Wiederholung und Vorbereitung auf die Klausur. Damit ist selbstverständlich nicht gesagt, dass sich die Klausur auf diese beiden Aufgabengebiete, sowie das Schwierigkeitsniveau der Aufgaben beschränkt. Lesen: Aufgabe 45: (H) Boolesche Algebra (5+5 Pkt.) Gegeben sind die wichtigsten Regeln der boolesche Algebra: 1 2 3 4 5 6 7 8 −−A A·0 A·A A · (−A) A·1 A·B A · (B · C) A + (B · C) = = = = = = = = A 0 A 0 A B·A (A · B) · C (A + B) · (A + C) 9 10 11 12 13 14 15 A+1 A+A A + (−A) A+0 A+B A + (B + C) A · (B + C) = = = = = = = 1 A 1 A B+A (A + B) + C (A · B) + (A · C) Leiten Sie nur unter Verwendung der obigen Regeln folgenden Aussagen ab: a. X + (X · Y) = X b. (X · Y) + (−X · Y) = Y Geben Sie für jeden Teilschritt die Nummer der verwendeten Regel an. Beispiel: (X + X) + (−X) = 1 (X + X) + (−X) = = X + (−X) 1 mit Regel 10 mit Regel 11 Aufgabe 46: (H) Arbeitsweise von Flipflops (10+1+3 Pkt.) Betrachten Sie die Schaltbilder der drei wichtigsten Flipflops (RS-Flipflop, D-Flipflop und JKFlipflop): Technische Grundlagen der Informatik – SS 2006, Übungsblatt 12 2 R Q S Q R Q Takt Q S D S Q D Q Takt Q R Q J Q S Q S Q R Q R Q J Q K Q Takt K a. Q Machen Sie sich die Funktionsweise der Flipflops klar, indem Sie die Zustandstabellen aufstellen. Jede der drei Tabellen soll folgendermaßen aufgebaut sein: – Jede Spalte entspricht einem Ein- bzw. Ausgang. Ein RS-Flipflop zum Beispiel verfügt über die drei Eingänge S, R und C (Clock/Takt), sowie über die Ausgänge Q und Q. – Jede Zeile entspricht einem bestimmten Zustand des Flipflops, abhängig von den Signalen an den Eingängen. – Mögliche Zustände sind: Set, Reset, Speichern und Kippen. Geben Sie hinter jeder Tabellenzeile an, welcher Zustand vorliegt. (Nicht alle Zustände kommen bei jedem Flipflop vor.) – Kennzeichnen Sie auch unzulässige Zustände. – Verwenden Sie, falls sinnvoll, Don’t-Care-Argumente. Wo es also für den Zustand egal ist, ob 0 oder 1 anliegt, tragen Sie D ein. – Verwenden Sie die Notation Q∗ , um den alten Wert von Q zu symbolisieren, falls dieser nicht explizit (0 oder 1) bekannt ist. b. Das D-Flipflop scheint gegenüber dem RS-Flipflop einen Vorteil zu besitzen. Welchen? c. Welches Problem ergibt sich aber beim D-Flipflop im Hinblick auf das Speichern über mehrere Takte hinweg? Verdeutlichen Sie das Problem durch ein Impulsdiagramm (siehe hierzu auch http://de.wikipedia.org/wiki/Impulsdiagramm), das die Verläufe der Signale D, C (Clock/Takt) und Q darstellt. Setzen Sie alle drei Signale anfangs auf 0, zeichnen Sie dann zunächst den Verlauf für das Taktsignal und führen Sie anschließend eine SetOperation durch. Technische Grundlagen der Informatik – SS 2006, Übungsblatt 12 3 Aufgabe 47: (P) ASCII-nach-Integer-Konversion (10 Pkt.) Schreiben sie ein MIPS-Programm zur Konversion eines ASCII-Strings aus Nummern in eine Ganzzahl. Lesen Sie die umzuwandelnde Zahl von der Konsole ein und geben Sie das Ergebnis aus. Hinweis: Ihr Programm muß keine negativen Zahlen umwandeln können. Wenn der String einen Buchstaben enthält, der keine Ziffer ist, so soll das Programm abbrechen mit dem Wert −1 in Register $v0. Beachten Sie besonders, was genau als Eingabe verarbeitet wird (schauen Sie sich den Speicher an!). Aufgabe 48: (T) Pipeline (1+1+2+4+6+2+4 Pkt.) a. Wie bestimmt man die Länge einer Pipelinestufe, d.h. wie lang muss das Zeitintervall für eine Stufe mindestens sein? b. Warum müssen die Pipelinestufen eine gleich lange Ausführungszeit besitzen? c. Wovon hängt der Leistungsgewinn einer idealen Pipeline ab (also ohne Berücksichtigung von Konflikten)? d. Bei der folgenden Frage wird von einer 5–stufigen Pipeline mit einer Ausführungszeit von 2ns pro Stufe ausgegangen. Folgende Ausführungszeiten sind gegeben: Befehl load word (lw) add IF 2 ns 2 ns ID 1 ns 1 ns EX 2 ns 2 ns MEM 2 ns — MA WB WB 1 ns 1 ns Die Pipeline sieht damit folgendermaßen aus: IF ID EX mit den Stufen: (i) IF: Instruction Fetch (ii) ID: Instruction Decode and register file read (iii) EX: EXecution or adress calculation (iv) MEM: data MEMory access (v) WB: Write Back Gegeben ist folgendes Programmfragment: 2 lw add add (i) $2, 100($5) $3, $3, $4 $1, $4, $5 Wie lang dauert die Ausführung dieses Programmfragments ohne Pipelining? (ii) Wie lang dauert die Ausführung dieses Programmfragments mit Pipelining? e. Welche Arten von Konflikten (Hazards) gibt es beim Pipelining? Geben Sie je ein Beispiel an. f. Welche Möglichkeiten gibt es (außer Delayed Branch) Pipeline–Stalls nach einem Branch– Befehl zu verhindern? Technische Grundlagen der Informatik – SS 2006, Übungsblatt 12 g. 4 Realisieren Sie ein Delayed Branch, indem Sie das folgende Programmfragment so modifizieren(evtl. auch Manipulation des Codes!), dass ein Pipeline–Stall nach dem Branch–Befehl vermieden wird, sich die Semantik des Programmfragments nicht ändert und keine neuen Konflikte entstehen! 2 4 sw addi add beq $2, $3, $4, $2, 100($3) $3, 4 $4, $2 $3, 200 L UDWIG -M AXIMILIANS -U NIVERSITÄT M ÜNCHEN I NSTITUT FÜR I NFORMATIK P ROF. D R . H ANS J ÜRGEN O HLBACH Sommersemester 2006 Übungsblatt 13 17.07.2006 Technische Grundlagen der Informatik Abgabetermin: 24.07.2006, 12:00 Uhr s.t. Achtung: Zu jeder Aufgabe ist eine Datei abzugeben, deren Name eindeutig die bearbeitete Aufgabe kennzeichnet (z.B. Aufgabe-18.txt). Stellen Sie die Dateien in ein extra Verzeichnis (mit beliebigem Namen, allerdings ohne Sonderzeichen und Umlaute) und packen Sie dieses zu einem ZIP-Archiv. Geben Sie dieses per UniWorx ab. Hinweis: In der Klausur werden – unter anderem – Multiple-Choice-Aufgaben gestellt. Beispiele dafür sind in Aufgabe 49 zu sehen. Lesen: Aufgabe 49: (H) Multiple Choice (6 Pkt.) Welche der folgenden Aussagen sind korrekt? a. Ausgehend von der 2er-Komplement-Darstellung ganzer Zahlen mit n Bits: Für jede ganze Zahl z im darstellbaren Intervall gilt, dass auch −z im darstellbaren Intervall liegt. b. Das Zusammenfassen von Feldern in einem Karnaugh-Diagramm entspricht der Anwendung der Resolutionsregel zur Vereinfachung Boolescher Terme. c. Die Menge der Booleschen Operationen {XOR, AND} ist funktional vollständig. d. Wenn die disjunktive Normalform (DNF) einer n-stelligen Booleschen Funktion ohne Don’tCare-Argumente aus m Termen besteht, dann besteht die konjunktive Normalform (KNF) dieser Funktion immer aus 2n − m Termen. e. Mit der imaginären Maschine können beliebig lange Zeichenketten verarbeitet werden. f. Die Java-VM speichert Objekte und deren Attribute und Methoden zur Laufzeit im ObjectStack (Objektkeller). Aufgabe 50: (H) JVM: Bytecode-Interpretation (12 Pkt.) Analysieren Sie folgendes Java-Bytecode-Fragment, das die Operation public int puzzle(int i) enthält. 2 .method public puzzle(I)I .limit locals 3 .limit stack 2 4 6 8 iconst_0 istore_0 iload_1 iflt end0 Technische Grundlagen der Informatik – SS 2006, Übungsblatt 13 2 l0: iload_0 iload_0 imul dup istore_2 getstatic java/lang/System/out Ljava/io/PrintStream; swap invokevirtual java/io/PrintStream/println(I)V iload_2 iload_1 if_icmpgt end0 iload_2 iload_1 if_icmpeq end1 iinc 0 1 goto l0 10 12 14 16 18 20 22 24 26 end1: iconst_1 ireturn 28 end0: 30 32 2 iconst_0 ireturn .end method a. Welche Funktion berechnet puzzle? b. Geben Sie die Ausgabe für die Eingabe i = 5 an. c. Folgendes Code-Fragment enthält eine leicht modifizierte Version von puzzle, bei der JavaBytecode-Verifizierer einen Fehler (java.lang.VerifyError) wirft. Warum? Überlegen Sie sich hierzu, wie sich der Stack für die Eingabe der Zahl 2 entwickelt. .method public puzzle(I)I .limit locals 3 .limit stack 4 4 iconst_0 istore_0 6 iload_1 iflt end0 8 10 l0: iload_0 iload_0 imul dup dup getstatic java/lang/System/out Ljava/io/PrintStream; swap invokevirtual java/io/PrintStream/println(I)V iload_1 if_icmpgt end0 iload_1 if_icmpeq end1 iinc 0 1 goto l0 12 14 16 18 20 22 24 end1: Technische Grundlagen der Informatik – SS 2006, Übungsblatt 13 3 iconst_1 ireturn 26 28 end0: 30 iconst_0 ireturn .end method Aufgabe 51: (H) Java-Assembler: Binomialkoeffizienten Der Binomialkoeffizient n k (12 Pkt.) ist für n, k ∈ N und n ≥ k wie folgt definiert: n n! = k! ∗ (n − k)! k Implementieren Sie ein Java-Assembler-Programm zur Berechnung von Binomialkoeffizienten. Auf der Internetseite der Vorlesung steht Ihnen dazu ein Java-Assembler-Programmrumpf zur Verfügung, der folgenden Java-Quellcode realisiert: public class Bin { 2 public static void main(String args[]) { int n = Integer.parseInt(args[0]); int k = Integer.parseInt(args[1]); Bin b = new Bin(); int result = b.bk(n, k); System.out.println(result); } 4 6 8 10 private int bk(int n, int k) { // .... } 12 14 } Ihre Aufgabe ist, die Operation private int bk(int n, int k) so zu implementieren, dass sie den Binomialkoeffzienten n berechnet. Sind n oder k keine natürlichen Zahlen, oder ist k > k n, so soll das Ergebnis -1 sein. Die verwendete Fakultätsfunktion mit einer einer Hilfsmethode der Klasse Bin implementiert werden. Mit dem Java-Assembler Jasmin (http://jasmin.sourceforge.net) können Sie das Programm zu lauffähigem Bytecode übersetzen (natürlich nur, sofern das Programm keine Fehler enthält). Jasmin liegt auf dem angegebenen Server nur im Quellcode vor. Auf der Vorlesungsseite wird Ihnen deshalb ein jar-Archiv zur Verfügung gestellt. Damit können sie Ihren Assembler-Quellcode mit dem Befehl java -jar DIR/jasmin.jar Bin.j übersetzen, wobei DIR das Verzeichnis darstellt, in dem Sie jasmin.jar gespeichert haben. Es lohnt sich trotzdem Jasmin bei Sourceforge zu laden, da unter anderem Beispiel-Programme enthalten sind. Hinweis: Sie können natürlich das geforderte Assembler-Programm mit dem Disassembler javap aus einer entsprechenden Klassendatei auslesen. Im Sinne des Lernerfolgs sollten Sie davon allerdings absehen.