Re: A83: calls


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

Re: A83: calls




I couldnt have said it better myself ;)

//Olle

Linus Akesson wrote:
> 
> Sorry, but Olle and I are right. Look at it from the z80's point of view:
> 
> 9327: call 932ah
> 932a: call 932dh
> 932d: ret
> 
> Log of events:
> 
> PC    Stack                      Instruction
> 9327  {Return to OS}             call 932ah
>       {Return to OS, 932a}       (= first push pc+3 as a new return
> address...)
>                                  (...and then jump)
> 932a  {Return to OS, 932a}       call 932dh
>       {Return to OS, 932a, 932d} (= first push pc+3 as a new return
> address...)
>                                  (...and then jump)
> 932d  {Return to OS, 932a, 932d} ret (= pop pc)
> 932d  {Return to OS, 932a}
>              but here we find a: ret (= pop pc)
> 932a  {Return to OS}             call 932dh
>       {Return to OS, 932d}       (= first push pc+3 as a new return
> address...)
>                                  (...and then jump)
> 932d  {Return to OS, 932d}       ret (= pop pc)
> 932d  {Return to OS}             ret (= pop pc)
> Back in TI-OS
> 
> It's right that the second time the ret is invoked, the z80 jumps back and
> executes a call instruction, but as you can see, the third time it is invoked
> it just jumps back to the ret immediately. Thus, there is no loop.
> 
> Linus
> 
> On 26-Sep-98, Jkhum98@aol.com wrote:
> 
> >In a message dated 09/26/98 1:29:08 PM, oh@hem.passagen.se writes:
> 
> >>Its not gonna be a loop because after he calles third label, he rets
> >>back to after the call to label and then rets out of the program...
> >>
> >>go through it again and I'm sure you will find that I am right :)
> >>
> >>//Olle
> 
> >Hmm, nope. I see that it will pass through the _Label_ "third_label" and
> carry
> >out another "ret", but Go one step further, and after returning from the very
> >First call, it will then pass through the _Label_ "second_label" and once
> >again does "call third label". Find, in my lil diagram, the words "(second
> >return spot)" and then you'll see the little arrow that points down, and from
> >there That is why a loop is created...
> 
> >--Jason K.
> >>>      first_label:
> >>>        call second_label
> >>> |-->    (second return spot)
> >>> |                |
> >>> |               V
> >>> |     second_label:
> >>> |       call third_label   -|
> >>> |  |--->(first return spot)   |
> >>> |  |             |                         |
> >>> |  |            V                      |
> >>> |  |  third_label:       <------|
> >>> |  |----ret(first time)
> >>> |------  (second time)


References: