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.