Du befindest dich hier: FSI Informatik » jahrgaenge » 2006 » "Muster"-Lösungen » "Muster"-Lösungen zu Klausuren aus Technische Informatik 2 » Aufgabe 1

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige ÜberarbeitungVorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
jahrgaenge:2006:loesungen:technische_informatik_2:mar2007 [20.09.2007 13:58] 84.149.155.71jahrgaenge:2006:loesungen:technische_informatik_2:mar2007 [21.09.2007 09:49] (aktuell) 77.180.121.116
Zeile 3: Zeile 3:
   * 1) 1, 2, 1, 2, 2, 1, 2 ,1   * 1) 1, 2, 1, 2, 2, 1, 2 ,1
   * 2) Register; Immediate Operand; Direct Adress; Register Indirect (alle Variationen); Memory Indirect   * 2) Register; Immediate Operand; Direct Adress; Register Indirect (alle Variationen); Memory Indirect
-  * 3) 1, 1, 2, 2, 2, 2, 1, 2 +  * 3) 1, 1, 2, 2, 2, 2, 2, 2 
-  * 4) 2, 1, 1, 1, 2, 1, 1, 2+  * 4) 2, 1, 1, 2, 2, 1, 1, 2
   * 5) Weil die Reihenfolge der einzelnen Bytes falsch gelesen wird, z. B. 0x000000FF -> 0xFF000000   * 5) Weil die Reihenfolge der einzelnen Bytes falsch gelesen wird, z. B. 0x000000FF -> 0xFF000000
   * 6) 2, 1, 1, 2, 2, 1, 2, 1   * 6) 2, 1, 1, 2, 2, 1, 2, 1
Zeile 15: Zeile 15:
 ==== Aufgabe 3 ==== ==== Aufgabe 3 ====
  
-  * 1) links vertikal Adressbus; rechts vertikal Datenbus; fehlend: IOR, MR+  * 1) links vertikal Adressbus; rechts vertikal Datenbus; fehlend: IOR, IOW, MR, MW, Interrupt
   * 2) ?   * 2) ?
   * 3) siehe Folien zu Rambaustein; MR, MW durch IOR, IOW ersetzen    * 3) siehe Folien zu Rambaustein; MR, MW durch IOR, IOW ersetzen 
Zeile 65: Zeile 65:
 ==== Aufgabe 6 ==== ==== Aufgabe 6 ====
  
-  * 1) ?+  * 1) 
 +<code> 
 +int func(int v) { 
 +    int i; 
 +    for (i = 0; i*i < v; i++); 
 +    return i; 
 +
 +</code> 
 + 
 +Einspruch: Bei einer for-Schleife wird ja schon vor dem Betreten die Bedingung geprüft, das passiert im Assembler-Code da aber nicht. 
 +Ich hätte da so was: 
 + 
 +<code> 
 +int func(int v) { 
 +    int i; 
 +    for (i = 0;; i++) { 
 +        i *= i; 
 +        if (i >= v) break; 
 +    } 
 +    return i; 
 +
 +</code> 
 + 
 +Die letzte Variante ist falsch, weil die Multiplikation mit %eax ist und %eax nicht zwischengespeichert wird. Dementsprechend ist die erste Variante richtig. 
 + 
 +Noch etwas: Ich glaube die Ints müssen unsigned Ints sein. 
   * 2) ?   * 2) ?
-  * 3) ?+  * 3)  
 + 
 +<code> 
 +unknown: 
 + pushl %ebp 
 + movl %esp, %ebp 
 + pushl $0 
 +   .L2: 
 +    movl  -4(%ebp), %eax 
 +    imull -4(%ebp), %eax 
 +    cmpl  8(%ebp), %eax 
 +    jb    .L4 
 +    jmp   .L3 
 +.L4: 
 +    incl  -4(%ebp) 
 +    jmp   .L2 
 +.L3: 
 +    movl  -4(%ebp), %eax 
 +    movl %ebp, %esp 
 + popl %ebp 
 +    ret 
 +</code>
  
 ==== Aufgabe 7 ==== ==== Aufgabe 7 ====