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.
Beide Seiten, vorherige ÜberarbeitungVorherige ÜberarbeitungNächste Überarbeitung | Vorherige Überarbeitung | ||
jahrgaenge:2006:loesungen:technische_informatik_2:mar2007 [20.09.2007 13:58] – 84.149.155.71 | jahrgaenge: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); | * 2) Register; Immediate Operand; Direct Adress; Register Indirect (alle Variationen); | ||
- | * 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; | * 3) siehe Folien zu Rambaustein; | ||
Zeile 65: | Zeile 65: | ||
==== Aufgabe 6 ==== | ==== Aufgabe 6 ==== | ||
- | * 1) ? | + | * 1) |
+ | < | ||
+ | int func(int v) { | ||
+ | int i; | ||
+ | for (i = 0; i*i < v; i++); | ||
+ | return i; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | 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: | ||
+ | |||
+ | < | ||
+ | int func(int v) { | ||
+ | int i; | ||
+ | for (i = 0;; i++) { | ||
+ | i *= i; | ||
+ | if (i >= v) break; | ||
+ | } | ||
+ | return i; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | 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) |
+ | |||
+ | < | ||
+ | unknown: | ||
+ | pushl %ebp | ||
+ | movl %esp, %ebp | ||
+ | pushl $0 | ||
+ | | ||
+ | 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 | ||
+ | </ | ||
==== Aufgabe 7 ==== | ==== Aufgabe 7 ==== |