Objetivos
Clique sobre os objetivos listados abaixo para navegar até o conteúdo desejado.
Instruções de Pilha/Stack
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+.
Para armazenar e recuperar dados na pilha, as instruções de Load/Store STM e LDM são usada.
Essas instruções podem ser vistas em Load e Store.
A pilha 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 ARMv4, 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}
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 na tabela 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. O tipo Full Descending, STMFD e
LDMFD, são compatíveis com os tipos de pilha utilizadas em outras arquiteturas como x86,
por exemplo, sendo de mais fácil compreensão.
Histórico de atualizações
- 18/05/2026 - revisão 1 - Ajustes: objetivos , intro, descrições 'tipo de pilha' e 'tabela resumo'
- 10/02/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.