Objetivos
Pilha
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.
"PUSH e PULL"
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
Stack Pointer
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.
Pilha e Subrotina
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.
Histórico de atualizações
- 12/03/2026 - Revisão 2 - Ajustes: pontuais e ícone; Adição: "Push e Pull", Stack Pointer, Pilha e subrotina
- 05/09/2024 - Revisão 1 - Correção de erros gramaticais
- 01/04/2024 - versão inicial
Os cursos oferecidos nesta página são cursos fornecidos por parceiros. Ao comprar um curso clicando
em seu banner, você está ajudando a manter o projeto TutorialDev vivo. Os sites dos cursos parceiros utilizam cookies.