[A83] Re: push - pop
[Prev][Next][Index][Thread]
[A83] Re: push - pop
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.
Any clearer?
///Olle
Follow-Ups:
References: