Objetivos
        
    
    
    
        Instruções para Controle de Fluxo
        
     
    
        
            
                As instruções de controle de fluxo são utilizadas para desviar o fluxo de execução de um programa alterando o 
                conteúdo dos registradores PC(R15) e LR(R14).
            
            
                Esse tipo de instrução é utilizada em conjunto com instruções de comparação para tomada de decisões, 
                executar código em loop, chamada de subrotinas, interrupções de software e outros.
            
            
                As flags do CPSR não são alteradas pelas instruções de branch não possibilitando o uso do sufixo S como 
                parte da instrução.
            
            
                Para chamada de subrotinas ou funções em cascata, o registrador R14 deve ser salvo na pilha para retornar
                ao fluxo de execução anterior.
            
            
                As instruções do tipo Thumb não estão presentes nas versões das arquiteturas v1, v2 e v3.  Esse tipo de 
                instrução está presente apenas em processadores com estensão T.
            
            
                Mais informações sobre registradores, flags e condições podem ser vistas 
                em Registradores e CPSR e 
                Formato: Condições.
            
            Notação utilizada:
            
                
                    
                         | 
                         | 
                    
                
                
                    
                        | label | 
                        nome da função ou recurso | 
                    
                    
                        | ;  | 
                        Comentário | 
                    
                    
                        | <- | 
                        Atribuição | 
                    
                    
                        | PC | 
                        Registrador R15 | 
                    
                    
                        | LR | 
                        Registrador R14 | 
                    
                
            
         
     
    
    
        
            
                A instrução B desvia o fluxo de execução, de forma incondicional, para um novo local onde a 
                execução do programa irá continuar. Esse endereço de novo local é sinalizado fazendo com que o branch
                seja positivo ou negativo.
            
            Sintaxe
            B{<cond>} <endereço>
            Operação
            PC <- PC + (+/-)endereço
            Endereçamento
            #imediato_24_bits
            Ex:
            MOV R0,#FF
B label
            
                Internamente, B desloca e estende <endereço> de 24-Bits para um valor 32-Bits que então é adicionado 
                ao PC(R15).
            
         
     
    
    
        
            
                A instrução BL é semelhante à instrução B. A diferença é que BL salva um endereço 
                de retorno do fluxo de execução no registrador LR(R14) para que posteriormente o retorno possa ser feito.
            
            Sintaxe
            BL{<cond>} <endereço>
            Operação
            LR <- endereço da próxima instrução
PC <- PC + (+/-)endereço
            Endereçamento
            #imediato_24_bits
            Ex:
            MOV R0,#FF
BL label
MOV R12, R0
            
                Para voltar para o fluxo anterior ao BL, o valor do registrador LR deve ser movido para o PC como abaixo.
                As flags de status podem ser utilizadas para que o retorna possa ser condicional.
            
            Sintaxe
            MOV{<cond>}{S} PC, LR
MOV{<cond>}{S} R15, R14
         
     
    
        BX - Branch and Exchange - (v4T+)
        
     
    
        
            
                A instrução BX é semelhante à instrução BL. A diferença é que BX
                troca a decodificação das instruções entre Thumb-1 e ARM antes de iniciar a execução uma instrução
                a partir do novo local de desvio. 
            
            Sintaxe
            BX{<cond>} Rm
            Operação
            CPSR[Flag T] <- Rm[Bit 0]
PC <- Rm[Bit 31:1] << 1
            Endereçamento
            Rm
            Ex:
            MOV R0,#FF
BX label
MOV R12, R0     ; endereço de retorno -> R14
            
                Para voltar para o fluxo anterior ao BX, o valor do registrador LR deve ser movido para o PC. Utilizando
                a própria instrução BX, como abaixo, podemos fazer o retorno do fluxo:
            
            Ex:
            MOV R0,#FF
BX label
MOV R12, R0     ; endereço de retorno -> R14
;
;
label:
; omitido
BX  LR      ;Retorna para fluxo
         
     
    
        Histórico de atualizações
        
     
    
        
            
                - 11/12/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.