3 ms·
Thankyou,So this means the cpu outputs data into the upper 8bits of the address and the stack pointer points to the lower 8bits? So for example if the current
by SairajK19 3y ago
Thankyou,So this means the cpu outputs data into the upper 8bits of the address and the stack pointer points to the lower 8bits?
So for example
if the current top of the stack is 0x01FF then
then SP will store FF, which being upper 8 bits of 0x01FF
and the data will be at 01 which being lower 8bits of 0x01FF ?
- pwg 3y agoEffectively, the top eight bits of the address bus are hard wired to always be 0x01 when the "stack" is being accessed. It is part of the decode and execution hardware of the CPU. It is also why the stack is always in page 1, and can not be moved to any other page. The stack pointer is used to drive the lower eight bits of the address bus during a stack read or write. The upper eight bits are always 0x01.
- SairajK19 3y agoOkay I get it now, upper 8bit always hard wired to be 0x01 which is also why lies in page 1. The stack pointer deals with lower 8bits from 00 to FF. Many thanks!
- simonblack 3y agoThat also restricts the stack to only 256 bytes, or 128 16-bit words. I wonder how that affects the use of a stack-machine programming language like C. Especially when running a program like 'Towers of Hanoi'. Wouldn't the 6502 run out of stack-space?
- SairajK19 3y agoYes, seems like you can easily run out of stack with 256 bytes. Maybe they used their own secondary stack along with the hardware stack. I wonder how big is modern 64bit cpu stack.
- simonblack 3y agoI wonder how big is modern 64bit cpu stack. In practical terms, I would consider it infinite. I doubt that we'd ever get to the point where we'd need even one-gigabyte of stack-space. And most modern machines have many, many gigabytes of RAM, as well as terabytes of disk storage that can be used as swap/stack/heap/cache space.