Technische Grundlagen der Informatik

Werbung
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.
Herunterladen