Re: A89: recursion question


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

Re: A89: recursion question




Not correct..
you cant 'rts' from just a branch..
what bsr (branch to subrutine) does, is that it pushes the adress of the next
instruction onto the stack and then jumps to the position stated (in this case
main_stuff_tests) the rts (return from subrutine) is then just taking the
address stored on top of the stack and jumps to this adress..

the beq, bne and such does _not_ push the address of the next instruction onto
the stack so rts will not return to the intstruction after the beq, it will just
take whatever stored on the stack and jump there.. straight out in psyberspaze
:)

//Olle

BLoWh0Le@aol.com wrote:
> 
> When you make a jump to a subroutine (using bsr and bxx commands), does
> control return to the exact spot where you left when the program runs into an
> rts command?
> 
> _main:
> move.w      #1,d0
> move.w      d0,stuff
> move.w      d0,stuff2
> bsr            main_stuff_tests
> rts
> 
> main_stuff_tests:
> cmp          stuff,d0
> beq           yes_stuff
> cmp          stuff2,d0
> beq           yes_stuff2
> rts
> 
> yes_stuff:
> add.w       #1,stuff
> rts
> yes_stuff2:
> add.w       #1,stuff2
> rts
> 
> here's how i think it goes with my current knowledge of asm:
> in _main: we move 1 to d0. then the value of d0 to stuff and stuff2. we jump
> to main_stuff_tests. we compare d0 with stuff.  it checks out so we jump to
> yes_stuff. there, we add 1 to stuff and jump back.  (FROM HERE I'M NOT 100%
> SURE) we then compare d0 with stuff2 and it checks out so we jump to
> yes_stuff2 and add 1 to stuff2.  then we jump back to main_stuff_tests.
> there, we reach the last command, rts, which returns us to _main.  there we
> run into another rts command, which ends the program.  am i correct?


References: