[A83] Re: push - pop


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

[A83] Re: push - pop






On Sat, 15 Dec 2001, Olle Hedman wrote:

>
> At 20:14 2001-12-15, you wrote:
> >push hl
> >pop bc
> >pop af
> >push hl
> >pop de
> >push bc
> >[and so on]
> >
> >Now what the hell happens??
> >I don't get it that only one sp can hold the answer to
> >multiple register pairs being pushed/popped.
> >Maybe every regiter pair has (inside the opcode of push/pop)
> >an offset, I mean the stack is divided into a piece
> >for bc, one for hl, one for de and one for af.
>
>
> No. You are misunderstanding the basics of a stack.
> When the calc boots, it sets sp to a memory adress, where the stack should
> be located. I don't know where exactly it is in the 83, but let say it is
> $0400.
> This is in ordinary RAM, where everything else also is.
> Then when you push something, lets say hl with the value $4242,
> the only thing that happens is that hl is stored at memory pos $0400, and
> the sp will be increased to $0402.
> Now you push bc with the value $3333.
> Only thing that happens is that bc is stored at the memory pos $0402, and
> sp will be increased to $0404.
> now you push af with the value $6666.
> the only thing that happens is that af is stored at memory pos $0404, and
> the sp will be increased to $0406.
> now you _pop_ hl.
>
> code this far.
>
> push hl
> push bc
> push af
> pop  hl
>
>
> what happens now is very simple. sp will first be decreased to $0404, and
> hl is loaded with the value at this memoryposition.
> ($6666 the value from the last push)
>
> then if continues in the same fasion.
>
> push something -> load at memoryposition that sp points too, increase sp
> pop something -> decrease sp, load at memoryposition sp points too.
>

Hmm, I hate to complain about small details, but I don't think this is
completely correct.  According to most of the Z80 documentation I have
read, push actually decreases the sp and then stores the value at the new
PC, while pop reads the value at sp and then increases sp.

OK, I lied.  I really love to complain about small details.





References: