Sie sind auf Seite 1von 8

Fachhochschule Ingolstadt bungsaufgaben Ingenieurinformatik

Fakultt fr Maschinenbau
Prof. Dr. Edwin Naroska

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 2er-
Komplementformat (9 Bitstellen v) anzugeben!

Binr Dezimal
010110111
128
111111111
-12
2. Aufgabe
Bestimmen Sie fr die folgenden 2er-Komplementfor S v
den darstellbaren Zahlenbereich. Geben Sie den Zahlenbereich in dezimaler und (binrer) 2er-
Komplementdarstellung an.

8 Kleinste darstellbare Zahl
(Dezimal und 2er-
Komplement)
Grte darstellbare Zahl
(Dezimal und 2er-
Komplement)

3



5



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 = 10
9
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 Pipeline-
Stall-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 addi r1, r0, 0
1 addi r2, r0, 2
2 addi r3, r0, 3
3 add r4, r0, r0
4 add r1, r1, r2
5 add r2, r2, r2
6 sub r2, r0, r2
7 addi r4, r4, 1
8 ble r4, r3, -4
9 halt

Welche Werte sind in den Register r1, bis r4 gespeichert, wenn der Prozessor den halt-Befehlt erreicht
W S 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
Vorher
Speicherinhalt
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 addi r1, r0, 0
1 addi r2, r0, 5
2 add r3, r0, r0
3 load r4, 200(r1)
4 add r3, r3, r4
5 store r3, 199(r1)
6 addi r1, r1, 1
7 ble r1, r2, -4
8 halt

W W 8 -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 8 v 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 l-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-F M



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
L S k vu S v
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




L S M 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!




L S M C 1
vu v v 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 k vu-Objekte als Parameter bergeben
bekommt und den aktuellen Vektor mit der Summe aus den beiden Parametervektoren initialisiert. Nutzen
S M

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:
u 8 u 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.
l l 8 8un
8
Zahlenkonstanten.

Befehl Bezeichnung Beschreibung
load ra, offset(rb) Lade indirekt mit
offset
Lade das Register ra mit dem Inhalt der
Hauptspeichers von der Adresse
(rb + offset)
store ra, offset(rb) Speicher indirekt
mit offset
Speichere den Inhalt des Register ra in
den Hauptspeicher an die Adresse
(rb + offset)
add ra, rb, rc Addiere ra = rb + rc
sub ra, rb, rc Subtrahiere ra = rb rc
addi ra, rb, imm Addiere mit
Immediate
ra = rb + imm
subi ra, rb, imm Subtrahiere mit
Immediate
ra = rb imm
and ra, rb, rc Bitweise
Verundung
ra = rb & rc
rb und rc werden bitweise und-verknpft
or ra, rb, rc Bitweise
Veroderung
ra = rb | rc
rb und rc werden bitweise oder-
verknpft
bne ra, rb, offset Branch not equal Springe nach PC + offset, falls ra != rb
beq ra, rb, offset Branch equal Springe nach PC + offset, falls ra == rb
bgt ra, rb, offset Branch greater
than
Springe nach PC + offset, falls ra > rb
bge ra, rb, offset Branch greater
equal
Springe nach PC + offset, falls ra >= rb
blt ra, rb, offset Branch less than Springe nach PC + offset, falls ra < rb
ble ra, rb, offset Branch less
equal
Springe nach PC + offset, falls ra <= rb