Klausur 702

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Klausur 702
Dann will ich mich mal an Steppenwolf dranhaengen:

1a, 1
b, 2,3,5,6
c, Da nach Aufuehrung des Interrupthandlers die Programmausfuehrung fortgesetzt wird und diese evtl. von den Werten in den Registern abhaengt
d, Rotate left fuegt rechts den Inhalt des Carrys der letzten Rotate-Operation ein, Shift left immer 0

2a, 2+10+4=16 Byte
→ 2048 Datensaetze
b, 4+12+4=20 Byte
2048x20 Byte = 40960 Byte

3a, andl $7, %eax
b, (Steppenwolf ist ein Held (; )
movl $160, %ebx
do: cmpl %ebx, $eax
jl next
subl %ebx, %eax
next: shrl $1, %ebx
cmp %ebx, $5
je end
jmp do
end: ret

4a, movl c, %eax
cmpl %eax, $97
jg end
cmpl %eax, $122
jl end
subl $32, %eax
movl %eax, c
end: …

b, (1+(1+1+1+1+1)x+2)*1/f=28ns
x=5

5a, 360 Byte
b, +120 Byte
c, int max(int a, int b) {
return (a>b)?a:b;
}

6a, zu stressig, wer das sehen will, wir treffen uns Dienstag in der Bib
b, boolean EQUAL (boolean carry, boolean zero, boolean negative) {
return (zero==true && carry == false);
}

Da sind wir uns nicht sicher, ob man das Carry auch ueberpruefen muss, um evtl. Unterlaeufe zu fangen. Steppenwolf: Hatten wir das jetzt als unmoeglich ausgeschlossen?

   boolean LESSEQUAL (boolean carry, boolean zero, boolean negative) {
return ((zero==true && carry == false) || negative == true);
}

c, Ebenfalls zu stressig, aber vom Prinzip folgendermassen:
input um drei shiften, dazu um eins geshifteten input addieren

Gruss,
Swarsron


ich weiss :]. ich bin sogar so heldenmaessig, dass ich nicht mehr weiss, was wir zu der aufgabe 6 beschlossen hatten, ob man das carry braucht oder nicht. so heldenmaessig, dass ich zu faul bin, nochmal drueber nachzudenken :].


siehe S204 Skript!Da hab ich aber jetzt keine Lösung (am PC) parat!
Vielleicht am Montag bei dem Treffen!


meinst du die multiplikation mit 10?
da hab ich auch nix im skript, ist mir aber auch so was eingefallen, ist bloss zu kompliziert, um es hier zu posten.


Hehe, eigentlich sollte es nicht schaden und falls man es doch braucht lass ich es lieber mal da. Aber wir koennen am Montag ja mal fragen, er muss es ja wissen

aufgabe 6b
zu 6b)

cmp a,b # b - a; (AT&T syntax)

carry flag wird gesetzt <–> ueberlauf bei arithmeitschen funktionen sprich b < a
negative (overflow) flag wird gesetzt <–> b < a wobei a und b vorzeichen zahlen sind
zero flag <–> b - a == 0 (vz egal)

—>
equal(carry,zero,negative) return z == 1;

lessorequal(carry, zero, negative) return ((carry == 1) || (zero == 1) || (negative == 1));

is nur so ne vermutung von mir…

wer ist dagegen???


Hey Swarsron!
Glaub du machst öfter mal den Fehler und schaust nicht wie groß die Daten sind beim Programmieren!
z.B.: bei Aufgabe 4a heißt es , man muss ein register char c …und noch weiteres in Assembler befehle umwandeln.
Dann müsstest du aber immer nur %al nehmen und nicht das ganze
%eax!Oder Täusch ich mich da? :*)


Und zu 6a:
Also ich hab da einfach 4 Halbaddierer nebeneinander geschaltet und beim ersten ein carry-in von 1.
Der Übertrag des letzten Halbaddierers kommt dann zum 5. Ausgang (also ganz links meine ich)!
Hab ein kleines Bild gemalt!Aber net besonders.
Und den HA muss man dann halt noch aus Xor und And-Gatter hinzeichnen!(OTRS1), sonst gibts fast keine Punkte!

Attachment:
Inkrementierer.JPG: https://fsi.cs.fau.de/unb-attachments/post_8771/Inkrementierer.JPG


Ja, das und signed/unsigned hat mich des oefteren erwischt, aber langsam sollte ich dran denken (;

Danke fuer den Hinweis


Hi,
warum addiert man bei der 4b noch ne 2 ?
(1+(1+1+1+1+1)x+2 ?

Mfg
Thomas


weil der Vergleich einmal mehr durchlaufen wird als die Schleife
(einmal vorher schon und nach dem letzten mal ja auch)