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: