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.
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.
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.
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 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.
O registrador SP pode ser decrementado e incrementado manualmente pelo usuário ou
automaticamente via instruções.
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 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.