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

  1. Pilha(Stack)
  2. Push e Pull
  3. Stack Pointer
  4. Pilha e Subrotina
  5. exemplos de código

A Stack(Pilha) do 68K utiliza a memória principal tendo o seu topo predefinido no vetor de interrupção vetor #0 que obrigatóriamente deve ser configurado.

Tab. 1: Vetor #0
Vetor Endereço Valor Valor
0 000000-00003h FFFFFFh Stack Pointer
1 000004-00007h 000002 Entry Point
(...) (...) (...)
7 - -

No processo de hard reset do processador, o valor no vetor zero é atribuído automaticamente sem a necessidade do usuário.

Não há restrição de tamanho de dados para armazenamento da pilha. Os dados 8,16, 24 e 32 são aceitos quando os registradores são armazenados via instruções MOV.

No 68K é possível alocarmos espaço na pilha para uso local de variáveis por meio de stackframe. Ao fim do uso, esse stackframe é destruído liberando assim o espaço alocado.

O manual do hardware que utiliza o 68k deve fornecer as informações básicas sobre como configurar o SP.

Não há instruções PUSH e PULL/POP como nos processadores 6502 e 8080/8086. As instruções de movimentação (MOVE e etc) de dados são responsáveis para mover e recuperar dados da pilha.

Ex:

MOVE.L D7, -(SP) ; D7 -> pilha
Pilha
12h
34h
65h
(...)
?? SP

A ordem recuperação dos dados da pilha, o PULL, deve ser inversa a a ordem de do PUSH. Caso os dados da pilha sejam recuperados de forma errada, ocorrerá erro no funcionamento do software.

Ex:

MOVE.L D7, -(SP)
MOVE.L D6, -(SP)
MOVE.L D5, -(SP)
MOVE.L (SP)+,D5
MOVE.L (SP)+,D6
MOVE.L (SP)+,D7

O registrador SP(A7) é responsável por armazenar o endereço/ponteiro do topo da pilha, e através do SP as instruções podem armazenar e recuperar dados da pilha.

O incremento e decremento do registrador SP é feito com base no tamanho do dado que é salvo na Stack: Byte, Word e Longword. Esse tamanho deve ser levado em consideração para que não haja erros na recuperação de dados o que pode acarretar em erros graves no software.

Tab. 1: Movimentando Byte
Pilha Empilhar Desempilhar

RAM
$FFFFFF SP-1
SP+1
...
...
$000000

No exemplo da tabela acima, utilizamos a pilha em sua forma mais simples com o tipo de dado byte. O top da pilha foi configurado como 0xFFFFFF.

Os valores contidos não são "limpos" após a recuperação. O registrador SP é incrementado, de acordo o tamanho do dado, para informar que o espaço anteriormente utilizado está disponível para uso.

O registrador SP pode ser decrementado e incrementado manualmente pelo usuário ou automaticamente via instruções.

A pilha do 68k pode 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. 3: Argumentos na pilha
SP Argumentos Descrição
+6 $aabb arg 1
+4 $ccdd arg 2
+2 $eeff arg 3
SP - -

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

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

O 68K fornece as instruções PEA, LINK e UNLINK, MOVE e MOVEM para salvar e recuperar dados na pilha. Essas instruções serão vistas mais adiante em Instruções: Pilha.

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

É possível a manipulação do SP utilizando instruções de Aritméticas, Movimentação e outras para operações mais complexas que envolvam parâmetros/argumentos.

O 68k possui LINK e UNLINK para trabalhar com alocação de espaço na pilha para subrotinas.

  1. 12/03/2026 - Revisão 2 - Ajustes: pontuais e ícone; Adição: "Push e Pull", Stack Pointer, Pilha e subrotina
  2. 05/09/2024 - Revisão 1 - Correção de erros gramaticais
  3. 01/04/2024 - versão inicial