SlideShare une entreprise Scribd logo
1  sur  8
Télécharger pour lire hors ligne
Fachhochschule Ingolstadt                                  Übungsaufgaben Ingenieurinformatik
   Fakultät für Maschinenbau
   Prof. Dr. Edwin Naroska




                          Übungsaufgaben für die Klausur
                           Ingenieurinformatik SS 2010




Vorbemerkungen
    Die Aufgaben in diesem Dokument dienen der Vorbereitung auf die Klausur im Fach
Ingenieurinformatik für 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 Bücher, keine Taschenrechner,
etc.)!


1. Aufgabe
   Ergänzen Sie die fehlenden Darstellungen der jeweiligen Zahlen. Binäre Zahlen sind im 2er-
Komplementformat (9 Bitstellen, einschließlich „Vorzeichen“) anzugeben!

                                  Binär                         Dezimal
                                010110111
                                                                     128
                                111111111
                                                                     -12



2. Aufgabe
   Bestimmen Sie für die folgenden 2er-Komplementformate mit „n“ Stellen (einschließlich „Vorzeichen“)
den darstellbaren Zahlenbereich. Geben Sie den Zahlenbereich in dezimaler und (binärer) 2er-
Komplementdarstellung an.

               Bitstellen „n“           Kleinste darstellbare Zahl         Größte darstellbare Zahl
                                            (Dezimal und 2er-                 (Dezimal und 2er-
                                              Komplement)                       Komplement)

                     3


                     5
3. Aufgabe
    Führen Sie folgende Additionen/Subtraktionen im binären Zahlensystem durch. Wandeln Sie also vor
der eigentlichen Addition/Subtraktion die Dezimalzahlen in entsprechende Binärzahlen (gegebenenfalls
2er-Komplementdarstellung) um. Die Binärzahlen sollen hierbei 8 Stellen besitzen.

                                Operation                    Rechnung im
                                                        (vorzeichenbehafteten)
                                                              Binärformat

                                 -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 für jede Phase genau
           einen Taktzyklus benötigt?

   Jetzt soll der Prozessor seine Befehle im Pipeline-Betrieb verarbeiten (bei gleicher Taktfrequenz).
       b. Wie viele Instruktionen kann der Prozessor jetzt pro Sekunde im günstigsten Fall abarbeiten?
       c. Wie viele Instruktionen pro Sekunde (bei gleicher Taktfrequenz) verarbeitet der Prozessor,
            wenn 20% der verarbeiteten Instruktionen Sprünge sind, die alle einen Pipeline-Stall von 2
            Takten verursachen?
       d. Wie viele Instruktionen pro Sekunde verarbeitet der Prozessor, wenn 50% der verarbeiteten
            Sprünge durch eine Sprungvorhersage korrekt vorhergesagt wurden? Bei einer korrekten
            Vorhersage gibt es keine Pipeline-Stalls, während falsche vorhergesagte Sprünge 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 für den RUN10000. Der Prozessor beginnt seine
Programmausführung 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
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 außerhalb
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 führe 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

    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 für 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 müssen nicht zusätzlich 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 ausgeführt?



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 enthält:

                  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 abändert (siehe unten) und laufen lässt?

                  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 zunächst passende Member, um die drei Koordinatenwerte aufnehmen zu können. Die
Koordinatenwerte sollen hierbei als Fließkommazahlen abgelegt werden und öffentlich zugänglich sein:

                 class Vec3D {
                                                                // Member bitte
                                                                // hier einfügen

                     …
                     }

    Erstellen Sie als nächstes eine Methode „length“, die von jedem aufgerufen werden kann (öffentlich
zugänglich) und keine Aufrufparameter übergeben bekommt. Die Methode soll die Länge des Vektors als
Rückgabewert zurück geben. Bitte tragen Sie auch den Funktionskopf ein!

                                             {                  // Tragen Sie auch den
                                                                // Funktionskopf ein!




                 }

   Erstellen Sie eine öffentlich zugängliche 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.

                                                          {     // Ergänzen Sie auch den
                                                                // Funktionskopf ein!




                 }


   Erstellen Sie einen Konstruktor, der die Initialisierungswerte für die drei Koordinaten als Parameter
übergeben bekommt.

             Vec3D(                                     ) {   // Aufrufparameter Definieren



             }

    Erstellen Sie als nächstes 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 (                                )     // Ergänzen sie auch den
              {                                            // Methodenkopf!




              }

    Mit Hilfe der eben erstellten Klasse werde nun in einem Hauptprogramm der nachfolgende
Programmcode ausgeführt. 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 führt 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 verfügbaren Befehle des RUN10000 aufgelistet. „ra“, „rb“ und
           „rc“ stehen für beliebige Register r0 bis r31. „offset“ und „imm“ stehen für
           Zahlenkonstanten.

                       Befehl              Bezeichnung         Beschreibung
             load    ra, offset(rb)        Lade indirekt mit   Lade das Register ra mit dem Inhalt der
                                           offset              Hauptspeichers von der Adresse
                                                               (rb + offset)
             store ra, offset(rb)          Speicher indirekt   Speichere den Inhalt des Register ra in
                                           mit offset          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         ra = rb + imm
                                           Immediate
             subi    ra, rb, imm           Subtrahiere mit     ra = rb – imm
                                           Immediate
             and     ra, rb, rc            Bitweise            ra = rb & rc
                                           Verundung           rb und rc werden bitweise und-verknüpft
             or      ra, rb, rc            Bitweise            ra = rb | rc
                                           Veroderung          rb und rc werden bitweise oder-
                                                               verknüpft
             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      Springe nach PC + offset, falls ra > rb
                                           than
             bge     ra, rb, offset        Branch greater      Springe nach PC + offset, falls ra >= rb
                                           equal
             blt     ra, rb, offset        Branch less than    Springe nach PC + offset, falls ra < rb
             ble     ra, rb, offset        Branch less         Springe nach PC + offset, falls ra <= rb
                                           equal

Contenu connexe

Similaire à Übungsaufgaben SS2010

Java Streams und Lambdas
Java Streams und LambdasJava Streams und Lambdas
Java Streams und LambdasNane Kratzke
 
SchüLerscript Imperative Programmierung Mit Der Delphi Konsole
SchüLerscript   Imperative Programmierung Mit Der Delphi KonsoleSchüLerscript   Imperative Programmierung Mit Der Delphi Konsole
SchüLerscript Imperative Programmierung Mit Der Delphi Konsoleguestcf99
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeFrank Müller
 
Einführung in die funktionale Programmierung
Einführung in die funktionale ProgrammierungEinführung in die funktionale Programmierung
Einführung in die funktionale ProgrammierungDigicomp Academy AG
 
SEROM 2018 - 11/14/17/20 - C++ gestern heute und morgen
SEROM 2018 - 11/14/17/20 - C++ gestern heute und morgenSEROM 2018 - 11/14/17/20 - C++ gestern heute und morgen
SEROM 2018 - 11/14/17/20 - C++ gestern heute und morgenDr. Herwig Henseler
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersUlrich Krause
 
Python in der Luft- und Raumfahrt
Python in der Luft- und RaumfahrtPython in der Luft- und Raumfahrt
Python in der Luft- und RaumfahrtAndreas Schreiber
 
AdvancedTdd
AdvancedTddAdvancedTdd
AdvancedTddjlink
 
C API for Lotus Notes & Domino
C API for Lotus Notes & DominoC API for Lotus Notes & Domino
C API for Lotus Notes & DominoUlrich Krause
 
Funktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit SodiumFunktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit SodiumTorsten Fink
 
Automatisierung von Windows-Anwendungen
Automatisierung von Windows-AnwendungenAutomatisierung von Windows-Anwendungen
Automatisierung von Windows-AnwendungenAndreas Schreiber
 
Parallele Softwareentwicklung mit .NET 4.0
Parallele Softwareentwicklung mit .NET 4.0Parallele Softwareentwicklung mit .NET 4.0
Parallele Softwareentwicklung mit .NET 4.0Qiong Wu
 
C / C++ Api for Beginners
C / C++ Api for BeginnersC / C++ Api for Beginners
C / C++ Api for BeginnersUlrich Krause
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Gregor Biswanger
 

Similaire à Übungsaufgaben SS2010 (20)

WiSe 2013 | Programmierpraktikum C++ - 01_Basics
WiSe 2013 | Programmierpraktikum C++ - 01_BasicsWiSe 2013 | Programmierpraktikum C++ - 01_Basics
WiSe 2013 | Programmierpraktikum C++ - 01_Basics
 
Java Streams und Lambdas
Java Streams und LambdasJava Streams und Lambdas
Java Streams und Lambdas
 
SchüLerscript Imperative Programmierung Mit Der Delphi Konsole
SchüLerscript   Imperative Programmierung Mit Der Delphi KonsoleSchüLerscript   Imperative Programmierung Mit Der Delphi Konsole
SchüLerscript Imperative Programmierung Mit Der Delphi Konsole
 
BIT I WiSe 2014 | Basisinformationstechnologie I - 05: Rechnertechnologie II
BIT I WiSe 2014 | Basisinformationstechnologie I - 05: Rechnertechnologie IIBIT I WiSe 2014 | Basisinformationstechnologie I - 05: Rechnertechnologie II
BIT I WiSe 2014 | Basisinformationstechnologie I - 05: Rechnertechnologie II
 
C++11 und c++14
C++11 und c++14C++11 und c++14
C++11 und c++14
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare Systeme
 
Bit WiSe 2013 | Basisinformationstechnologie I - 09: Kurzwiederholung / Klaus...
Bit WiSe 2013 | Basisinformationstechnologie I - 09: Kurzwiederholung / Klaus...Bit WiSe 2013 | Basisinformationstechnologie I - 09: Kurzwiederholung / Klaus...
Bit WiSe 2013 | Basisinformationstechnologie I - 09: Kurzwiederholung / Klaus...
 
Einführung in die funktionale Programmierung
Einführung in die funktionale ProgrammierungEinführung in die funktionale Programmierung
Einführung in die funktionale Programmierung
 
Typescript
TypescriptTypescript
Typescript
 
SEROM 2018 - 11/14/17/20 - C++ gestern heute und morgen
SEROM 2018 - 11/14/17/20 - C++ gestern heute und morgenSEROM 2018 - 11/14/17/20 - C++ gestern heute und morgen
SEROM 2018 - 11/14/17/20 - C++ gestern heute und morgen
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino Developers
 
Python in der Luft- und Raumfahrt
Python in der Luft- und RaumfahrtPython in der Luft- und Raumfahrt
Python in der Luft- und Raumfahrt
 
AdvancedTdd
AdvancedTddAdvancedTdd
AdvancedTdd
 
C API for Lotus Notes & Domino
C API for Lotus Notes & DominoC API for Lotus Notes & Domino
C API for Lotus Notes & Domino
 
Funktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit SodiumFunktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit Sodium
 
Automatisierung von Windows-Anwendungen
Automatisierung von Windows-AnwendungenAutomatisierung von Windows-Anwendungen
Automatisierung von Windows-Anwendungen
 
Parallele Softwareentwicklung mit .NET 4.0
Parallele Softwareentwicklung mit .NET 4.0Parallele Softwareentwicklung mit .NET 4.0
Parallele Softwareentwicklung mit .NET 4.0
 
Do while
Do whileDo while
Do while
 
C / C++ Api for Beginners
C / C++ Api for BeginnersC / C++ Api for Beginners
C / C++ Api for Beginners
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
 

Übungsaufgaben SS2010

  • 1. Fachhochschule Ingolstadt Übungsaufgaben Ingenieurinformatik Fakultät für Maschinenbau Prof. Dr. Edwin Naroska Übungsaufgaben für die Klausur Ingenieurinformatik SS 2010 Vorbemerkungen Die Aufgaben in diesem Dokument dienen der Vorbereitung auf die Klausur im Fach Ingenieurinformatik für 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 Bücher, keine Taschenrechner, etc.)! 1. Aufgabe Ergänzen Sie die fehlenden Darstellungen der jeweiligen Zahlen. Binäre Zahlen sind im 2er- Komplementformat (9 Bitstellen, einschließlich „Vorzeichen“) anzugeben! Binär Dezimal 010110111 128 111111111 -12 2. Aufgabe Bestimmen Sie für die folgenden 2er-Komplementformate mit „n“ Stellen (einschließlich „Vorzeichen“) den darstellbaren Zahlenbereich. Geben Sie den Zahlenbereich in dezimaler und (binärer) 2er- Komplementdarstellung an. Bitstellen „n“ Kleinste darstellbare Zahl Größte darstellbare Zahl (Dezimal und 2er- (Dezimal und 2er- Komplement) Komplement) 3 5
  • 2. 3. Aufgabe Führen Sie folgende Additionen/Subtraktionen im binären Zahlensystem durch. Wandeln Sie also vor der eigentlichen Addition/Subtraktion die Dezimalzahlen in entsprechende Binärzahlen (gegebenenfalls 2er-Komplementdarstellung) um. Die Binärzahlen sollen hierbei 8 Stellen besitzen. Operation Rechnung im (vorzeichenbehafteten) Binärformat -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 für jede Phase genau einen Taktzyklus benötigt? Jetzt soll der Prozessor seine Befehle im Pipeline-Betrieb verarbeiten (bei gleicher Taktfrequenz). b. Wie viele Instruktionen kann der Prozessor jetzt pro Sekunde im günstigsten Fall abarbeiten? c. Wie viele Instruktionen pro Sekunde (bei gleicher Taktfrequenz) verarbeitet der Prozessor, wenn 20% der verarbeiteten Instruktionen Sprünge sind, die alle einen Pipeline-Stall von 2 Takten verursachen? d. Wie viele Instruktionen pro Sekunde verarbeitet der Prozessor, wenn 50% der verarbeiteten Sprünge durch eine Sprungvorhersage korrekt vorhergesagt wurden? Bei einer korrekten Vorhersage gibt es keine Pipeline-Stalls, während falsche vorhergesagte Sprünge 2 Pipeline- Stall-Takte verursachen. 5. Aufgabe Warum werden Daten- und Programm-Caches bei Prozessoren eingesetzt? Welches Problem wird durch die Caches gemildert?
  • 3. 6. Aufgabe Gegeben sei das folgende Programm für den RUN10000. Der Prozessor beginnt seine Programmausführung 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 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 außerhalb 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 führe 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 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?
  • 4. 8. Aufgabe Wandeln Sie die folgende Java-Programmsequenz in ein entsprechendes Maschinenprogramm für 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 müssen nicht zusätzlich 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 ausgeführt? 10. Aufgabe Erzeugen Sie eine Java-Programmsequenz, die das Ergebnis der mathematische Formel berechnet. Verwenden Sie NICHT die mathematische Library-Funktion „Math.Pow“!
  • 5. 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 enthält: 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 abändert (siehe unten) und laufen lässt? 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));
  • 6. 12. Aufgabe Entwickeln Sie eine Klasse „Vec3D“, welche zur Speicherung von dreidimensionalen Vektoren genutzt werden kann. Erzeugen Sie zunächst passende Member, um die drei Koordinatenwerte aufnehmen zu können. Die Koordinatenwerte sollen hierbei als Fließkommazahlen abgelegt werden und öffentlich zugänglich sein: class Vec3D { // Member bitte // hier einfügen … } Erstellen Sie als nächstes eine Methode „length“, die von jedem aufgerufen werden kann (öffentlich zugänglich) und keine Aufrufparameter übergeben bekommt. Die Methode soll die Länge des Vektors als Rückgabewert zurück geben. Bitte tragen Sie auch den Funktionskopf ein! { // Tragen Sie auch den // Funktionskopf ein! } Erstellen Sie eine öffentlich zugängliche 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. { // Ergänzen Sie auch den // Funktionskopf ein! } Erstellen Sie einen Konstruktor, der die Initialisierungswerte für die drei Koordinaten als Parameter übergeben bekommt. Vec3D( ) { // Aufrufparameter Definieren } Erstellen Sie als nächstes 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“.
  • 7. Vec3D ( ) // Ergänzen sie auch den { // Methodenkopf! } Mit Hilfe der eben erstellten Klasse werde nun in einem Hauptprogramm der nachfolgende Programmcode ausgeführt. 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()); }
  • 8. 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 führt 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 verfügbaren Befehle des RUN10000 aufgelistet. „ra“, „rb“ und „rc“ stehen für beliebige Register r0 bis r31. „offset“ und „imm“ stehen für Zahlenkonstanten. Befehl Bezeichnung Beschreibung load ra, offset(rb) Lade indirekt mit Lade das Register ra mit dem Inhalt der offset Hauptspeichers von der Adresse (rb + offset) store ra, offset(rb) Speicher indirekt Speichere den Inhalt des Register ra in mit offset 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 ra = rb + imm Immediate subi ra, rb, imm Subtrahiere mit ra = rb – imm Immediate and ra, rb, rc Bitweise ra = rb & rc Verundung rb und rc werden bitweise und-verknüpft or ra, rb, rc Bitweise ra = rb | rc Veroderung rb und rc werden bitweise oder- verknüpft 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 Springe nach PC + offset, falls ra > rb than bge ra, rb, offset Branch greater Springe nach PC + offset, falls ra >= rb equal blt ra, rb, offset Branch less than Springe nach PC + offset, falls ra < rb ble ra, rb, offset Branch less Springe nach PC + offset, falls ra <= rb equal