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

  1. Entender a Pilha(Stack)
  2. Stack Frame
  3. SP - Movimentação circular

A pilha/Stack é o local onde o processador pode salvar e recuperar dados auxiliando na execução de algum trecho de código quando trabalhamos. A Stack pode ser utilizada para salvar registradores como backup, armazenar argumentos para uma função e também alocação de espaço local.

Diferente de outras arquiteturas, ARM fornece configurações de pilha que podem ser Full Descending(FD), Empty Descending(ED), Full Ascending(FA), Empty Ascending(EA). Essa definição fica à escolha do usuário.

Em FD, a pilha se movimenta a partir do topo, memória mais alta, para a base, memória mais baixa. O tipo FA se movimenta da base para o topo.

As formas ED e EA são semelhantes às formas FD e FA, mas apontando para o próximo espaço vazio da pilha.

Tab. 1: Pilha ARM: FD
Pilha Empilhar Desempilhar
$FFFFFFFF SP - 4
SP + 4
...
...
$00000000
Tab. 1: Pilha ARM: FA
Pilha Empilhar Desempilhar
$00000000 SP + 4
SP - 4
...
...
$FFFFFFFF

O acesso à pilha, assim como em outras arquiteturas, é feito por intermédio do registrador SP(R13) que é decrementado/incrementado para armazenar/remover dados de acordo com o tipo de pilha.

Apenas valores 32-bits podem ser empilhados e desempilhados da pilha tendo a ordem de desempilhar dos dados inversa à forma de empilhar. Qualquer manipulação errada da pilha acarretará em erros graves no software.

Os valores não são removidos literalmente da pilha, o registrador SP é incrementado disponibilizando assim espaço na pilha. Os dados antigos continuam no mesmo local até que sejam sobrescritos.

As instruções para movimentação de múltiplos valores, LDM e STM, são utilizadas para armazenar e remover elementos da stack. A partir da versão v5+, instruções Push e Pop foram introduzidas.

Em instruções de pilha, exemplos de pilhas FD e FA serão vistos bem como seus sinônimos.

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. 2: Argumentos na pilha
SP Argumentos Descrição
+12 $11223344 arg 1
+8 $55667788 arg 2
+4 $aabbccdd 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
+12 - retorno 1
+8 - retorno 2
+8 - retorno 3
SP - -

As intruções que envolvem a pilha pode ser vistas mais informações em instruções de 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.

A ARMv4 não especifica intruções para criação de stack frame como nos processadores 68K e x86. O stack frame deve ser feito via manipulação de SP.

  1. 22/04/2026 - revisão 1 - Ajustes: pontuais; Adição: 'pilha e subrotina'
  2. 27/01/2025 - versão inicial