Sie sind auf Seite 1von 8

Fachhochschule Ingolstadt Fakultt fr Maschinenbau Prof. Dr.

Edwin Naroska

bungsaufgaben Ingenieurinformatik

bungsaufgaben fr die Klausur Ingenieurinformatik SS 2010

Vorbemerkungen
Die Aufgaben in diesem Dokument dienen der Vorbereitung auf die Klausur im Fach Ingenieurinformatik fr das Sommersemester 2010. Bitte beachten Sie, dass Anzahl und Format der hier gestellten Aufgaben nicht notwendiger Weise denen der Klausur entsprechen.

Beachten Sie bitte zudem, dass in der Klausur keinerlei Hilfsmittel zugelassen sind (keine handschriftlichen Unterlagen, keine Bcher, keine Taschenrechner, etc.)!
1. Aufgabe
Ergnzen Sie die fehlenden Darstellungen der jeweiligen Zahlen. Binre Zahlen sind im 2erKomplementformat (9 Bitstellen, einschlielich Vorzeichen) anzugeben! Binr 010110111 111111111 -12 Dezimal 128

2. Aufgabe
Bestimmen Sie fr die folgenden 2er-Komplementformate mit n Stellen (einschlielich Vorzeichen) den darstellbaren Zahlenbereich. Geben Sie den Zahlenbereich in dezimaler und (binrer) 2erKomplementdarstellung an. Bitstellen n Kleinste darstellbare Zahl (Dezimal und 2erKomplement) Grte darstellbare Zahl (Dezimal und 2erKomplement)

3. Aufgabe
Fhren Sie folgende Additionen/Subtraktionen im binren Zahlensystem durch. Wandeln Sie also vor der eigentlichen Addition/Subtraktion die Dezimalzahlen in entsprechende Binrzahlen (gegebenenfalls 2er-Komplementdarstellung) um. Die Binrzahlen sollen hierbei 8 Stellen besitzen. Operation Rechnung im (vorzeichenbehafteten) Binrformat

-128 + 1

127 - 1

-124 - 4

4. Aufgabe
Gegeben sei ein Prozessor ohne Pipelining, der seine Instruktionen in 5 Phasen abarbeitet und mit 1,0 GHz (1 GHz = 109 Hz) getaktet wird. a. Wie viele Instruktionen verarbeitet der Prozessor pro Sekunde, wenn er fr jede Phase genau einen Taktzyklus bentigt? Jetzt soll der Prozessor seine Befehle im Pipeline-Betrieb verarbeiten (bei gleicher Taktfrequenz). b. Wie viele Instruktionen kann der Prozessor jetzt pro Sekunde im gnstigsten Fall abarbeiten? c. Wie viele Instruktionen pro Sekunde (bei gleicher Taktfrequenz) verarbeitet der Prozessor, wenn 20% der verarbeiteten Instruktionen Sprnge sind, die alle einen Pipeline-Stall von 2 Takten verursachen? d. Wie viele Instruktionen pro Sekunde verarbeitet der Prozessor, wenn 50% der verarbeiteten Sprnge durch eine Sprungvorhersage korrekt vorhergesagt wurden? Bei einer korrekten Vorhersage gibt es keine Pipeline-Stalls, whrend falsche vorhergesagte Sprnge 2 PipelineStall-Takte verursachen.

5. Aufgabe
Warum werden Daten- und Programm-Caches bei Prozessoren eingesetzt? Welches Problem wird durch die Caches gemildert?

6. Aufgabe
Gegeben sei das folgende Programm fr den RUN10000. Der Prozessor beginnt seine Programmausfhrung mit der Anweisung 0. 0 1 2 3 4 5 6 7 8 9 addi addi addi add add add sub addi ble halt r1, r0, 0 r2, r0, 2 r3, r0, 3 r4, r0, r0 r1, r1, r2 r2, r2, r2 r2, r0, r2 r4, r4, 1 r4, r3, -4

Welche Werte sind in den Register r1, bis r4 gespeichert, wenn der Prozessor den halt-Befehlt erreicht hat? Wie oft wird die Sprunganweisung ble r4, r3, -4 (Anweisung Nr. 8) verarbeitet? Wie oft wird die Anweisung Nr. 1 verarbeitet?

7. Aufgabe
Gegeben sei ein System mit dem Prozessor RUN10000, welcher ein Programm abarbeiten soll. Der Datenspeicher habe vor Beginn der Programmabarbeitung den nachfolgenden Inhalt (alle Werte auerhalb des Adressbereichs 199 bis 204 seien 0): Adresse Speicherinhalt Speicherinhalt Vorher Nachher 0 199 0 200 10 201 20 202 30 203 40 204 50 0 Der Prozessor fhre nun ein Programm beginnend mit der Anweisung an Adresse 0 aus: 0 1 2 3 4 5 6 7 8 addi addi add load add store addi ble halt r1, r0, 0 r2, r0, 5 r3, r0, r0 r4, 200(r1) r3, r3, r4 r3, 199(r1) r1, r1, 1 r1, r2, -4

Welche Werte stehen in den Register r1, r2, r3 und r4, wenn der Prozessor die halt-Anweisung erreicht hat? Welche Werte stehen in den Speicherstellen 199 bis 204?

8. Aufgabe
Wandeln Sie die folgende Java-Programmsequenz in ein entsprechendes Maschinenprogramm fr den RUN10000 um. int i = 1; int sum = 0; do { if (i < 100) sum += 2*i; else sum += i; } while (++i < 1000); Speichern Sie in dem Programm die Variable i im Register r1 und die Variable sum im Register r2. Diese Variablen mssen nicht zustzlich im Speicher abgelegt werden.

9. Aufgabe
Welche Ausgabe erzeugt die folgende Java-Programmsequenz auf dem Bildschirm: int i = 1; int sum = 0; for ( ; i < 10; i += i) { sum += i; i += 1; } System.out.println(sum + " " + i); Wie oft wird der Rumpf der For-Schleife in dieser Programmsequenz ausgefhrt?

10. Aufgabe
Erzeugen Sie eine Java-Programmsequenz, die das Ergebnis der mathematische Formel

berechnet. Verwenden Sie NICHT die mathematische Library-Funktion Math.Pow!

11. Aufgabe
Gegeben sei die nachfolgende Klassendefinition: class Test { public int[] value = null; public Test(int i) { this.value = new int[i]; for (int j = 0; j < i; j++) this.value[j] = i; } public int calc(Test a, Test b) { int sum = 0; for (int i = 0; i < a.value.length; i++) sum += a.value[i]; for (int i = 0; i < b.value.length; i++) sum += b.value[i]; return sum; } } Basierend auf diesem Klassen-Code wurde nun ein Hauptprogramm erstellt, welches die folgende Programmsequenz enthlt: Test x = new Test (2); Test y = new Test (3); System.out.println(x.calc(x, y)); System.out.println(y.calc(y, x)); Welche Ausgabe erzeugt diese Programmsequenz auf dem Bildschirm? Was passiert, wenn man die Sequenz etwas abndert (siehe unten) und laufen lsst? Test x = new Test (2); Test y = new Test (4); Int[] v = new int[] { 1, 1, 1, 1, 1 }; System.out.println(x.calc(x, y)); y.value = v; System.out.println(x.calc(x, y));

12. Aufgabe
Entwickeln Sie eine Klasse Vec3D, welche zur Speicherung von dreidimensionalen Vektoren genutzt werden kann. Erzeugen Sie zunchst passende Member, um die drei Koordinatenwerte aufnehmen zu knnen. Die Koordinatenwerte sollen hierbei als Fliekommazahlen abgelegt werden und ffentlich zugnglich sein: class Vec3D { // Member bitte // hier einfgen } Erstellen Sie als nchstes eine Methode length, die von jedem aufgerufen werden kann (ffentlich zugnglich) und keine Aufrufparameter bergeben bekommt. Die Methode soll die Lnge des Vektors als Rckgabewert zurck geben. Bitte tragen Sie auch den Funktionskopf ein! { // Tragen Sie auch den // Funktionskopf ein!

} Erstellen Sie eine ffentlich zugngliche Methode add, die als Parameter einen Objekt vom Typ Vec3D bergeben bekommt und diesen Vektoren zum aktuellen Vektor hinzuaddiert! Hinweis: Zwei Vektoren werden addiert, indem man die entsprechenden Koordinatenwerte summiert. { // Ergnzen Sie auch den // Funktionskopf ein!

Erstellen Sie einen Konstruktor, der die Initialisierungswerte fr die drei Koordinaten als Parameter bergeben bekommt. Vec3D( ) { // Aufrufparameter Definieren

} Erstellen Sie als nchstes eine Konstruktor, der zwei Vec3D-Objekte als Parameter bergeben bekommt und den aktuellen Vektor mit der Summe aus den beiden Parametervektoren initialisiert. Nutzen Sie dazu die oben definierte Methode add.

Vec3D ( {

// Ergnzen sie auch den // Methodenkopf!

} Mit Hilfe der eben erstellten Klasse werde nun in einem Hauptprogramm der nachfolgende Programmcode ausgefhrt. Was gibt die Routine auf dem Bildschirm aus? Hinweis: Sie brauchen den ausgegebenen Zahlenwert nicht auszurechnen (die Angabe der entsprechenden Formel reicht aus)! public static void test () { Vec3D a = new Vec3D(1, 2, 3); Vec3D b = new Vec3D(3, 2, 1); Vec3D c = new Vec3D(a, b); a.add(b); a.add(c); System.out.println(a.length()); }

Anhang A: Kurzbeschreibung des Prozessors RUN1000 Soweit in der Aufgabenstellung nicht anders angegeben, besitzt der Prozessor RUN10000 die folgenden Eigenschaften: Der Prozessor besitzt 32 Register r0, r1, r31. Das Register r0 ist hierbei immer 0, das Register r31 ist der Programcounter PC. Alle Register sind 32 Bit gro. Soweit nicht anders angegeben fhrt der Prozessor alle arithmetischen Berechnungen (auch die Berechnungen zur Ermittlung einer Speicheradresse) vorzeichenbehaftet durch. Wenn nicht anders angegeben, besitzt der Prozessor keinen Branch-Delay-Slot. Wenn nicht anders angegeben, nutzt der Prozessor kein Pipelining. Wenn nicht anders angegeben, sind in Maschinenprogrammen alle Zahlenkonstanten in Dezimalnotation angegeben. Im Folgenden sind die verfgbaren Befehle des RUN10000 aufgelistet. ra, rb und rc stehen fr beliebige Register r0 bis r31. offset und imm stehen fr Zahlenkonstanten.
Befehl ra, offset(rb) Bezeichnung Lade indirekt mit offset Speicher indirekt mit offset Addiere Subtrahiere Addiere mit Immediate Subtrahiere mit Immediate Bitweise Verundung Bitweise Veroderung Branch not equal Branch equal Branch greater than Branch greater equal Branch less than Branch less equal Beschreibung Lade das Register ra mit dem Inhalt der Hauptspeichers von der Adresse (rb + offset) Speichere den Inhalt des Register ra in den Hauptspeicher an die Adresse (rb + offset) ra = rb + rc ra = rb rc ra = rb + imm ra = rb imm ra = rb & rc rb und rc werden bitweise und-verknpft ra = rb | rc rb und rc werden bitweise oderverknpft Springe nach PC + offset, falls ra != rb Springe nach PC + offset, falls ra == rb Springe nach PC + offset, falls ra > rb Springe nach PC + offset, falls ra >= rb Springe nach PC + offset, falls ra < rb Springe nach PC + offset, falls ra <= rb

load

store ra, offset(rb)

add sub addi subi and or

ra, rb, rc ra, rb, rc ra, rb, imm ra, rb, imm ra, rb, rc ra, rb, rc

bne beq bgt bge blt ble

ra, rb, offset ra, rb, offset ra, rb, offset ra, rb, offset ra, rb, offset ra, rb, offset