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, f(edit: zero-bit hat nichts mit rechten zu tun), f(edit:adressirungsart ist doch egal es geht nur darum ob ich auf die speicheadresse zugreifen darf oder nicht. das wie ist doch egal)
  • 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

???

Aufgabe 7