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.
2010-09-29 - Aufgabe 07 Assembler-Programmierung
Vereinfachen Sie den folgenden bedingten Ausdruck und stellen Sie ihn nur mit Hilfe von if-then-goto-/goto-Anweisungen dar! (6 Punkte)
IMHO geht hieraus nicht hervor, dass nach x() bzw. y() das Programm an der selben Stelle weitermacht. Außerdem würde ich Funktionsaufrufe nicht mit Sprungmarken vermischen („goto y()“).
Du meinst wahrscheinlich 8(%ebp)*. 4(%esp) dürfte einfach nur der vorletzte dem Stack hinzugefügte Wert sein.
Aber du hast recht dass a[2] eher unpassend ist:
Wenn 4(%esp) = a[2], dann wäre (%esp) = a[1] und a[0] wäre unterhalb des Stackpointers also eigentlich ungültig…
(* eine übliches Schema ist, dass (%ebp) den gesicherten %ebp enthält, dann folgt die Rücksprungadresse, dann die Aufrufparameter)
Schau dir mal die oben zitierte Folie an…
Zur Übergabe von Parametern an Unterfunktionen werden die Parameter zum Beispiel über den Stack übergeben.
Die liegen dann da, und beim Funktionsaufruf wird dann die Rücksprungadresse draufgepusht, d.h. oben auf dem Stack liegt die Rücksprungadresse.
Direkt drunter liegt der Parameter, der übergeben werden sollte.
Da der Stack in Richtung kleinerer Adressen wächst, und an [esp] der letzte draufgepushte Wert liegt, ist [esp+4] = 4(%esp) der Parameter.
gut das glaube ich halbwegs verstanden zu haben .
abschließende frage: ein parameter könnte aber schon die form eines arrays besitzen. durch irgendwelche speicherzellen scheine ich ja durchiterieren zu wollen… ? oder handelt es sich hierbei einfach um die einzelnen parameter. haben also funktionen (da sie über den Stack implementier werden) eine variable parameter anzahl? ; sprich: mein programm bildet die summe der 10 übergabeparameter ?
also
addiert er alle nat. zahlen bis x auf?
auf gut deutsch , er macht das was der klein gauß hätte rechnen sollen, nur das er schlauer war als unser assembler-programmierer?
Streng genommen darfst du nur “if-then-goto” benutzen, also du kannst nicht [m]y()[/m] und [m]goto[/m] im [m]if[/m] verwenden, sondern nur [m]goto[/m].
edit: Was hat es eigentlich mit der seltsamen Einrückung auf sich?