Ask HN: How does 6502 stack pointer store addr 0x10FF being an 8bit register
Hello, I was working on emulating 6502 processor, I came to know that 6502 has a 8bit SP which starts from 0x0100 to 0x01FF. So how does it store 0x01FF which is over 8 bits.
Thankyou!
9 comments
[ 4.8 ms ] story [ 31.9 ms ] threadSo 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 ?
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.
Many thanks!
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?
I 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.
See it as a digital display with two hex digits and the value “0x01” painted in front of it:
The cpu, similarly, hard-wires those 8 bits (seven zeros and a single one) in front of the register value when accessing the stack.