Tiamat
2009-06-08, 21:31:13
Hi Leute,
also wir programmieren dieses Semester in einem Fach Motorola 68000 in Assembler.
Also der Sprachumfang ist eigentlich ziemlich schlank, allerdings gibt es ein Konzept, was ich net so wirklich verstehe.
Ich möchte vor einem Unterprogrammaufruf gewisse Parameter auf dem Stack ablegen. Beim 68k gibt es keinen speziellen PUSH Befehl ( is einfach MOVE ) und als Stackpointer benutzt man einfach das Adressregister A7.
Um etwas auf den Stack zu legen macht man also
MOVE var,-(A7), um etwas vom Stack herunterzunehmen
MOVE (A7)+,var
Jetzt hab ich ne ganze Liste an Zahlen, man könnte sagen ein Array und diese einzelnen Zahlen der Liste leg ich auf den Stack ab.
Dann möchte ich ein Unterprogramm aufrufen , welches sich um die Bearbeitung der Parameter kümmert.
JSR unterprogramm
Das Problem was ich jetzt habe ist, dass die Rücksprungadresse automatisch auf dem Stack abgelegt wird, und mir so den Zugang zu den Parametern erschwert ( mir fällt schon was ein wie ich trotzdem herankomme ), aber was noch drastischer ist, mich daran hindert den Stack nach getaner Arbeit wieder abzubauen.
Eine Möglichkeit wäre, die Rücksprungadresse in einem anderen Register zu sichern, die Rücksprungadresse auf dem Stack einfach herunterzunehmen und den Stack Element für Element abzubauen. Irgendwie erscheint mir das jedoch sinnlos, wozu wurde die Adresse dann auf dem Stack hinterlegt, wenn ich so rumfrickeln muss.
Wie löst man das Problem denn üblicherweise ?
also wir programmieren dieses Semester in einem Fach Motorola 68000 in Assembler.
Also der Sprachumfang ist eigentlich ziemlich schlank, allerdings gibt es ein Konzept, was ich net so wirklich verstehe.
Ich möchte vor einem Unterprogrammaufruf gewisse Parameter auf dem Stack ablegen. Beim 68k gibt es keinen speziellen PUSH Befehl ( is einfach MOVE ) und als Stackpointer benutzt man einfach das Adressregister A7.
Um etwas auf den Stack zu legen macht man also
MOVE var,-(A7), um etwas vom Stack herunterzunehmen
MOVE (A7)+,var
Jetzt hab ich ne ganze Liste an Zahlen, man könnte sagen ein Array und diese einzelnen Zahlen der Liste leg ich auf den Stack ab.
Dann möchte ich ein Unterprogramm aufrufen , welches sich um die Bearbeitung der Parameter kümmert.
JSR unterprogramm
Das Problem was ich jetzt habe ist, dass die Rücksprungadresse automatisch auf dem Stack abgelegt wird, und mir so den Zugang zu den Parametern erschwert ( mir fällt schon was ein wie ich trotzdem herankomme ), aber was noch drastischer ist, mich daran hindert den Stack nach getaner Arbeit wieder abzubauen.
Eine Möglichkeit wäre, die Rücksprungadresse in einem anderen Register zu sichern, die Rücksprungadresse auf dem Stack einfach herunterzunehmen und den Stack Element für Element abzubauen. Irgendwie erscheint mir das jedoch sinnlos, wozu wurde die Adresse dann auf dem Stack hinterlegt, wenn ich so rumfrickeln muss.
Wie löst man das Problem denn üblicherweise ?