Clique sobre os objetivos listados abaixo para navegar até o conteúdo desejado.

  1. Pilha(Stack)

A Stack(Pilha) do 6502, diferente de outros processadores, possui 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. Esses dados podem ser vistos como argumentos para subrotinas.

Tab. 1: Pilha
Pilha PUSH PULL



Circular
$01FF SP-



SP+
$0100
Ex 1:
PHA ;push
PLA ;pull

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.

A pilha é usada tanto para backup de valores quanto para passagem de argumentos para subrotinas. Ver Intruções: Controle de Fluxo > JSR em instruções.

Ex 2:
PHA ;push
JSR subrotina

A manipulação da pilha pode ser feita utilizando instruções de transferência e aritméticas. Essas podem ser vistas em Instruções: Transferência e Instruções: Aritméticas.

Ex 3:
TSX ;SP -> X
INX ; SP + 1
;uso da pilha

A pilha do 6502 também é utilizada para a passagem de argumentos para subrotinas. O registrador SP é manipulado para recuperar esses argumentos e também armazenar valores de retorno.

Tab. 2: Argumentos na pilha
SP Argumentos Descrição
+6 $cc arg 1
+4 $bb arg 2
+2 $aa arg 3
SP - -

Para armazenar espaço para valores de retorno, a stack deve ser decrementada de acordo com os valores de retorno.

Tab. 3: Espaço para retorno
SP Retorno Descrição
+6 - retorno 1
+4 - retorno 2
+2 - retorno 3
SP - -

A manipulação da pilha pode ser feita utilizando instruções de Aritméticas, Exchange e Movimentação ou transferência.

Tanto quanto argumentos quanto espaço para retorno, após o retorno da subrotina o SP deve ter seu valor restaurado para manter a consistência.

  1. 09/03/2026 - revisão 5 - Adição: Pilha e subrotina
  2. 12/01/2026 - revisão 4 - Ajustes pontuais; Adição: Exs 1,2 e 3 ; info. sobre JSR e manipulação de dados
  3. 12/03/2025 - revisão 3 - Correção em valores circulares de SP; Ajustes pontuais
  4. 11/09/2024 - revisão 2 - adição de fórmula de endereço de pilha e outras correções
  5. 04/10/2023 - revisão 1 - adição de links, correção em layout, navegação e erros gramaticais
  6. 28/04/2023 - versão inicial