[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: