[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
>
>
Yes, but pushing something decreases the SP and poping increases the SP.
The stack grows down =)
- - Joe
--------------------------------
Joe Pemberton
http://tiworld.calc.org
--------------------------------
_____________________________________________
Free email with personality! Over 200 domains!
http://www.MyOwnEmail.com