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

  1. Recuperando dados
  2. Tabela Resumo
  3. Instrução PUSH (v5+ apenas)
  4. Instrução POP (v5+ apenas)
  1. Exemplos ilustrativos

A arquitetura ARM v4 não define instruções como PUSH/PULL e POP específicas para manipulação da stack de um processador que segue essa arquitetura. Essas instruções estão disponíveis a partir da versão v5 ou superior.

Para armazenar e recuperar dados na pilha, as instruções de Load/Store STM e LDM respectivamente para armazenar e recuperar. Essas instruções podem ser vistas em Load e Store. A pilha na ARM v4 pode ser vista em Pilha.

Nenhuma flag é afetada pelas instruções de pilha LDM e STM, exceto quando uma instrução MSR é utilizada em conjunto. As instruções são executadas de acordo com a condição <cond> utilizada.

A pilha é acessada utilizando o registrador de Segmento SP, R13, em conjunto com os modos endereçamentos de pilha mostrados mais a frente.

Mais informações sobre registradores, flags e condições podem ser vistas em Registradores e CPSR e Formato: Condições.

Notação utilizada:
; Comentário
<- Atribuição
SP Stack Pointer
Rx Registradore

Na ARM v4, diferente de outras arquiteturas, podemos utilizar os tipos de incremento/decremento after e before. Assim podemos utilizar a pilha tanto na forma crescente ou decrescente, em relação à base e top da memória. A tabela abaixo mostra esses tipos/modos de endereçamento e seus mnemônicos.

Tab. 1: Tipo de incremento
Tipo Descrição Sigla
Decrement After Decrementar Depois DA
Decrement Before Decrementar Antes DB
Increment After Incrementar Depois IA
Increment Before Incrementar Antes IB
Sintaxe
MNEMÔNICO{<cond>}{sigla} sp!, {lista-registradores}

Na ARM v4, são definidos os tipos de pilha Descending e Ascending que são como alias para os tipos de incremento vistos acima. Esses tipos são dividos em Full e Empty. No Full, o SP aponta para um espaço preenchido ou cheio, enquanto na Empty o SP aponta para um espaço que está vazio.

Tab. 2: Tipo de Pilha
Tipo Descrição Sigla
Full Descending Descendente FD
Full Ascending Ascendente FA
Empty Descending Descendente ED
Empty Ascending Ascendente EA
Sintaxe
MNEMÔNICO{<cond>}{sigla} sp!, {lista-registradores}

Com base nos tipos de incremento e tipo de pilha da ARM v4, podemos utilizar as instrução STM para armazenar mútiplos registrados. Para armazenar o CPSR é necessário utilizar a instrução MRS para salvar o CPSR em um dos registradores.

Sintaxe
STMFD sp!, {lista-registradores}  ; Full Descending
STMDB sp!, {lista-registradores} ; Full Descending
Exemplo:
STMFD sp!, {R0-R2}  ; Full Descending
LDMDB sp!, {R0-R2}  ; Full Descending

Com base nos tipos de incremento e tipo de pilha da ARM v4, podemos utilizar as instrução LDM para recuperar mútiplos registrados. Para recuperar o CPSR, é necessário utilizar a instrução MSR para mover conteúdo de um registrador para o CPSR.

Sintaxe
LDMFD sp!, {lista-registradores}  ; Full Descending
LDMIA sp!, {lista-registradores} ; Full Descending
Exemplo:
STMFD sp!, {R0-R2}  ; Full Descending
LDMIA sp!, {R0-R2}  ; Full Descending

Com base nas instruções de load e store, STM e LDM, e nos tipos de stack e incremento, podemos resumir o uso dessas instruções e seus alias como abaixo:

Tab. 3: Tipo Stack x STM/LDM
Tipo de Stack STM LDM
FD STMFD ou STMDB LDMFD ou LDMIA
FA STMFA ou STMIB LDMFA ou LDMDA
ED STMED ou STMDA LDMED ou LDMIB
EA STMEA ou STMIA LDMEA ou LDMIA

O uso das instruções acima fica a cargo do usuário ou programador. O tipo Full Descending, STMFD e LDMFD, é compatível com os tipos de pilha utilizadas em outras arquiteturas como x86, por exemplo, sendo o de mais fácil compreensão.

  1. 10/02/2024 - versão inicial