A Stack(Pilha) do 6502, diferente de outros processadores possuindo um região de memória pré-definida e fixa.
A pilha reside na página 1 de memória que compreende o intervalo entre 0x100
e 0x1FF e cresce
a partir do limite superior em direção ao inferior, permitindo armazenar 256 bytes.
O registrador SP(8-bits) é responsável por armazenar o endereço/ponteiro do topo da pilha,
e através dele as instruções podem armazenar e recuperar dados na pilha. O cálculo é feito como
na fórmula abaixo:
Fórmula:
endereço_pilha <- 0x0100 + SP
As instruções do tipo PUSH e PULL são responsáveis
pelo armazenamento e remoção de dados na pilha respectivamente. O SP é decrementado no PUSH e incrementado no PULL
de acordo com o tamanho do dado.
Tab. 1: Pilha
|
Pilha |
PUSH |
PULL |
↑
Circular
↓ |
$01FF |
SP-
↓ |
SP+
↑ |
|
|
|
|
|
$0100 |
O armazenamento e remoção de dados na pilha funciona de forma circular, ultrapassando
o limite mínimo, 0x0100, o registrador SP
irá "dar a volta" e apontar para 0xFF. O mesmo acontece em relação ao valor máximo
0xFF, que irá apontar para 0x00 ao ser ultrapassado.
Os valores contidos na página 1 não são "limpos" após o uso das instruções de PUSH/PULL. O registrador SP é incrementado
para informar que o espaço anteriormente utilizado esteja disponível para uso.