Klausur 10/2003


4a) einfach so: oder?

void proc()
{
    outl(inl(0x3F0) + inl(0x3F4) + inl(0x3F8), 0x3FC);
}

Bei der 4b würde mich eher interessieren, /welches/ der beiden Programme man da kompilieren soll. Ich würd mal mein eigenes nehmen, das ist ja kürzer.


seh ich auch so, das eigene


bin da skeptisch, denn für die addition brauchste ne temporäre variable.
oder wollen die sowas sehen wie den [font=courier]register int c[/font] bloedsinn?!


ich habs auch mit register hingeschrieben


Naja, die Addition ließe sich ja auch komplett in Registern ausführen, und welcher Compiler würde dann ne Variable aufm Stack dafür verwenden? (Wie ich dann in der anderen Teilaufgabe demonstrieren würde.)

4a)
wie gewaehrleistet man genau, dass das aequivalente Hochsprachenprogramm moeglichst wenig Platz aufm Stack verwendet?


nicht alle Variablen auf den Stack schreiben sondern mit den Adressen arbeiten oder?


meine 4b) einigermassen ok? :wink:

proc:
pushl %eax
pushl %edx
movl 4(%esp), %eax // res
movl 8(%esp), %ebx // x
movl 12(%esp), %ecx // y
movl 16(%esp), %edx // z

inl:
movl %ebx, 0x3f0
ret
movl %ecx, 0x3f4
ret
movl %edx, 0x3f8
addl %ebx, %ecx
addl %edx, %ecx
movl %ecx, %eax
call … (was muss ich callen???)

aufg.3
meine idee:

func(a) {
int a;
while(a <= 15) {
} else {
a *= 2;
func(0);
func(1);

func(14);
func(15);
return;
}
}