Re: A89: Stupid Stack Operation Question


[Prev][Next][Index][Thread]

Re: A89: Stupid Stack Operation Question




At 08:58 1999-01-14 -0800, you wrote:
>But, you did not answer my question.  Sure you have access to all stack
>data at all times.  But usually one gets data as LIFO using some sort of
>pop (which restores SP), like move.w  (A7)+, D0.  
>
>If I do: move.w  D0, -(A7)   ; pushes D0 onto stack
>         jsr     myRoutine
>         ; some restoration here is only necessary if SP is same as
>         ; before jsr.
>
>Doesn't the myRoutine usually access the data with:
>         move.w  (A7)+, D0   ; pops the Data and restores SP pointer.

Nope, this would pop the return address... or part of it anyway. Remember
that a call (jsr or bsr) pushes the program counter on the stack.

>         ; do something
>         rts                 ; returns to calling program with original SP
>                             ; restored.
>
>So, if it does work this way, the stack is already restored when the
>return occurs.  If fact if the SP is restored to it's original data and
>I add something to that value, I have grown the stack unnecessarily.

But it doesn't work that way :) It's much easier to access the pushed
data with a move #x(a7),d0 instruction. Also, if popping was done, you
would only be able to access the value once.

>Does TI use this latter method of accessing subroutine parameters?  Is
>that maybe why the SP is corrected.  That is, access the parameters
>without modifying the SP?

Right :)

//Jimmy Mårdell

E-mail: yarin@acc.umu.se
Homepage: http://www.acc.umu.se/~yarin/


Follow-Ups: References: