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 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.
Histórico de atualizações
- 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.