Objetivos
        
    
    
    
        Instruções para Controle de Fluxo
        
     
    
        
            
                As instruções de controle de fluxo são responsáveis por desviar o fluxo de execução de programas 
                alterando o conteúdo do registrador PC ( Contador de Programa) para um novo local.
            
            
                As flags de status C, N e Z são utilizadas pela instrução Bcc enquanto a flag B, é utilizada por BRK.
                Nenhuma flag, exceto B, é afetada após a execução..
            
            Notação utilizada:
            
                
                    
                         | 
                         | 
                    
                
                
                    
                        | #$NN | 
                        Valor hexadecimal imediato | 
                    
                    
                        | #$NNNN; | 
                        Endereço hexadecimal imediato | 
                    
                    
                        | $NNNN | 
                        Endereço hexadecimal | 
                    
                    
                        | $NN ou h | 
                        Valor hexadecimal | 
                    
                    
                        | ;  | 
                        Comentário | 
                    
                    
                        | () | 
                        Conteúdo de memória | 
                    
                    
                        | M | 
                        Endereço de Memória | 
                    
                    
                        | <- | 
                        Atribuição | 
                    
                    
                        | Flags | 
                         | 
                    
                    
                        | a | 
                        Alterada de acordo com resultado | 
                    
                    
                        | - | 
                        Não sofre alteração | 
                    
                    
                        | 0 | 
                        Sempre zero | 
                    
                    
                        | 1 | 
                        Sempre um | 
                    
                
            
            
                Mais informações sobre os registradores e flags podem ser vistas 
                em Registradores.
            
            
                Para saber mais sobre o funcionamento de interrupções do 6502, visite a seção 
                Interrupções.
            
         
     
    
        JMP - Jump - Pulo Incondicional
        
     
    
        
            
                A instrução JMP desvia o fluxo de execução, de forma incondicional, para um endereço absoluto imediato, não sinalizado, 
                de 16-bits que é atribuído ao PC. 
            
            Operação
            PC <- $NNNN
            Endereçamento
            
            PS - Flags afetadas
            N: -
V: -
B: - 
D: -
D: -
Z: -
C: -
            Ex:
            
inicio: ; função
JMP fim
; codigo omitido
;
fim:
JMP inicio
         
     
    
    
        
            
                As instruções de desvio/branch são executadas sobre condições específicas das flags do 6502. Um valor imediato
                sinalizado é adicionado ao PC que realiza um JMP relativo,"para cima" ou "para baixo", que compreende o intervalo
                entre -128 e 127 bytes.
            
            Operação
            PC <- PC + (+/-)$NN
            Endereçamento
            
            CC:
            
                - BCC	Desvia se flag C = 0
                
 
                - BCS	Desvia se flag C = 1
                
 
                - BEQ	Desvia se flag Z = 1
                
 
                - BNE	Desvia se flag Z = 0
                
 
                - BMI	Desvia se flag N = 1
                
 
                - BPL	Desvia se flag N = 0
                
 
                - BVC	Desvia se flag V = 0
                
 
                - BVC	Desvia se flag V = 1
                
 
            
            PS - Flags afetadas
            N: -
V: -
B: - 
D: -
D: -
Z: -
C: -
            Ex:
            
LDA #$01
ADC $00
BCC funcao ; Desvio se C = 0
         
     
    
        JSR  - Jump To Subroutine - Pular para Subrotina
        
     
    
        
            
                A instrução JSR é utilizada para desviar o fluxo de execução para uma subrotina. 
                A próxima instrução para retorno é salvo na Pilha, o PS é salvo na Pilha e o endereço imediato de 16-bits 
                é transferido para o registrador PC que continua a execução a partir da subrotin. 
            
            Operação
            SP -1 <- PC.LSB
SP -2 <- PC.MSB
PC <- $NNNN
            Endereçamento
            
            PS - Flags afetadas
            N: -
V: -
B: - 
D: -
D: -
Z: -
C: -
            Ex:
            
;trecho omitido
JSR _funcao ; Invoca _funcao
;trecho omitido
;
_funcao:
;trecho omitido
         
     
    
        RTS - Return From Subroutine - Retorno de Subrotina
        
     
    
        
            
                A instrução RTS é utilizada ao fim de uma subrotina ou procedimento para retornar 
                para a o fluxo de execução anterior à chamada da instrução JSR. O endereço de 16-bits salvo na 
                Pilha é transferido para o registrador PC que continua a execução. 
            
            Operação
            PC.LSB <- (SP + 1)
PC.MSB <- (SP + 2)
SP <- SP + 2
            Endereçamento
            
            PS - Flags afetadas
            N: -
V: -
B: - 
D: -
D: -
Z: -
C: -
            Ex:
            
;trecho de codigo
JSR _funcao ; Invoca _funcao
;continua fluxo após RTS
;...
_funcao:
;trecho omitido
RTS ; continua fluxo
            
         
     
    
        BReaK - Breakpoint / Ponto de Depuração
        
     
    
        
            
                A instrução BRK força uma interrupção software via programação para que um determinado tratamento ou uma depuração
                seja feita. Os registradores PC e PS são salvos na pilha e o endereço de 16-bits contido no vetor de interrupção 
                $FFFE é atribuído no PC.
            
            
                O byte imediato à instrução é utilizado internamente pela rotina contida em $FFFE para situações que devem ser tratadas. 
                A flag B deve ser checada para a distinção entre IRQ e BRK pois utilizam o mesmo vetor de interrupção. 
            
            Operação
            Stack <- PC + 2
PS.B <- 1
Stack <- PS
PC <- ($FFFE)
            Endereçamento
            
            PS - Flags afetadas
            N: -
V: -
B: 1
D: -
D: -
Z: -
C: -
            Ex:
            
BRK #$01 ; breakpoint forçado
; trecho omitido
;
            
funcao_break: ; endereço armazenado no VDI
;corpo omitido
            
                Para entender essa instrução é recomendada a leitura sobre 
                Arquitetura: Interrupções e VDI e 
                também a flag B em Registradores.
            
         
     
    
        RTI - Return From Interrupt - Retorno de Interrupção
        
     
    
        
            
                A instrução RTI é utilizada ao fim de uma subrotina de interrupção(ISR) para 
                retornar a o fluxo de execução após seu término. Um byte salvo na Pilha e transferido 
                para o registrador PS e endereço 16-bits salvo na Pilha é transferido para o 
                registrador PC que continua a execução.
            
            
            Operação
            PS <- (SP)
PC.LSB < - (SP + 1)
PC.MSB <- (SP + 2)
            Endereçamento:
            
            PS - Flags afetadas
            N: -
V: -
B: - 
D: -
D: -
Z: -
C:-
            Ex:
            
; corpo de funcao
BRK #$01 ; breakpoint forçado
;
            
funcao_break: ; endereço armazenado no VDI
;corpo 
RTI           ; retorno da interrupção
            
                Na instrução RTS, o endereço de retorno aponta para a próxima instrução após JSR. Em RTI, o endereço de 
                retorno é a instrução corrente onde interrupção IRQ ou NMI ocorreu.
            
         
     
    
        Histórico de atualizações
        
     
    
        
            
                - 12/03/2025 - revisão 4 - Correção em operação de JSR/RTS/BRK, Descrição BRK; Adição de retorno de RTS e RTI; Ajustes pontuais
 
                - 11/09/2024 - revisão 3 - adição de flags afetadas e correções em introdução e JSR, RTS, RTI e BRK
 
                - 30/08/2024 - revisão 2 - Correção em links de objetivos
 
                - 04/10/2023 - revisão 1 - adição de links, correção em layout e navegação
 
                - 28/04/2023 - 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.