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 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 em um programa.

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.

  1. 27/01/2025 - versão inicial