Du befindest dich hier: FSI Informatik » jahrgaenge » 2006 » "Muster"-Lösungen » "Muster"-Lösungen zu Klausuren aus Technische Informatik 2 » Aufgabe 1 (Übersicht)
Dies ist eine alte Version des Dokuments!
Aufgabe 1
- 1) w, f , f, f, w, w, w, w
- 2) w, w, f, w, f, w, w, w
- 3) mov für Speicherzugriff; in/out für IO-Zugriff - ist aber privilegierte Operation (vgl. Tastatur-Blinker-Aufgabe!)
- 4) Die Behandlung eines Interrupts darf nicht durch einen anderen Interrupt unterbrochen werden, da sie nicht neu aufgesetzt werden kann.
Aufgabe 2
1.
- A E X
- A E X
- A X E
- A X E
- EA EA EA
- A E E
- E X A
2. Da gibt's bestimmt eine schöne Zeichnung im Skript.
- Eingänge: IOR, IOW, Adressbus
- Ein-/Ausgang: Datenbus
- Fest: Adresse des Geräts
- Adresse am Adressbus wird durch Komparator mit Geräteadresse verglichen. Ausgang des Komparators wird verundet mit IOR (→ Leitung zu Sensor) und IOW (→ Leitung zu Aktor).
- Sensor hat Ausgang auf Datenbus, Aktor Eingang von Datenbus.
Aufgabe 3
- 1)
Größe einer Struktur: 2 + 10 + 4 = 16 Bytes
Größe des Adressraums: 2^16 Bytes = 64 kB; 48 kB für Programm ⇒ 16 kB frei für Daten
16 kB / 16 Bytes = 1024
- 2) Neue Strukturgröße: 4 + 10 + 2 (Alignment) + 4 = 20 Bytes; 1024 Datensätze: 20 kB
- 3)
movl 8(%esp), %eax xorl %ebx, %ebx orb %al, %bl shrl $8, %eax shll $8, %ebx orb %al, %bl shrl $8, %eax shll $8, %ebx orb %al, %bl shrl $8, %eax shll $8, %ebx orb %al, %bl movl %ebx, 4(%esp) ret
Aufgabe 4
- 1) tanx → Taylorreihe; div → Newton-Rphson / Shift / Subtraktion; mul → Addition / Shift
- 2) (steht nirgends schnell):
#define unsigned int ui #define unsigned short us ui mult(us x, us y) { ui sum = 0; for (int i = 0; i < y; i++) sum += x; return sum; }
Das funktioniert so nicht. Hierbei muss immer geshiftet werden. Am besten ein Beispiel rechnen und dann sieht man es.
Aufgabe 5
- 1)
#define unsigned int ui ui fibo(ui x) { ui res; if (x < 2) { res = 1; goto more; } x = x - 1; res = fibo(x); x = x - 1; res = res + fibo(x); more: return res; }
- 2)
movl 4(%esp), %ebx cmpl $2, %ebx jge else //unsigned -> jae ? movl $1, %eax ret else: subl $1, %ebx pushl %ebx call fibo addl $4, %esp movl %eax, %ecx subl $1, %ebx pushl %ebx call fibo addl $4, %esp addl %ecx, %eax ret
Das funktioniert so nicht… Wegen der tiefen Rekursion werden die Register immer wieder ueberschrieben. Man muss hierbei den Stack verwenden, in em da das Zwischenergebnis gespeichert wird.
Aufgabe 6
???