Clique sobre os objetivos listados abaixo para navegar até o conteúdo desejado.

  1. Instruções de controle de fluxo
  2. JMP
  3. Bcc
  4. JSR
  5. RTS
  6. BRK
  7. RTI

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 ou próxima instrução a ser executada.

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.

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
Absoluto JMP #$NNNN
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 de 8-bit sinalizado é adicionado ao PC que realiza um JMP relativo, "para cima" ou "para baixo", que compreende o intervalo entre -126 e 127 bytes.

Operação
PC <- PC + 2 + (+/-)$NN
Endereçamento
Relativo BCC #$NN
CC:
  1. BCC Desvia se flag C = 0
  2. BCS Desvia se flag C = 1
  3. BEQ Desvia se flag Z = 1
  4. BNE Desvia se flag Z = 0
  5. BMI Desvia se flag N = 1
  6. BPL Desvia se flag N = 0
  7. BVC Desvia se flag V = 0
  8. 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

A instrução JSR é utilizada para desviar o fluxo de execução para uma subrotina ou procedimento. O endereço da instrução seguinte é salvo na Pilha para retorno. O PS é salvo na Pilha e um endereço imediato de 16-bits é transferido para o registrador PC que continua a execução.

Operação
retorno <- PC  ; PC <- PC + 3 incrementado automaticamente
SP - 1 <- retorno.LSB
SP - 2 <- retorno.MSB
PC <- $NNNN
Endereçamento
Imediato JSR $NNNN
PS - Flags afetadas
N: -
V: -
B: - 
D: -
D: -
Z: -
C: -
Ex:
;trecho omitido
JSR _funcao ; Invoca _funcao
;trecho omitido
;
_funcao:
;trecho omitido

Subrotinas com apenas 1 nível de profundidade são conhecidas como non-leaf. As subrotinas com mais de um nível de profundidade são conhecidas com leaf.

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 pela JSR é transferido para o registrador PC que continua a execução a partir do fluxo anterior.

Operação
PC.LSB <- (SP + 1)
PC.MSB <- (SP + 2)
SP <- SP + 2
Endereçamento
Implícito RTS
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

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.

A instrução BRK só será executada caso a flag I tenha sido configurada para 0 previamente. Caso seja 1, a instrução seja ignorada. Essa flag é setada para 1 quando a instrução é executada para inibir outra interrupção IRQ e vice-versa.

Operação
Stack <- PC ;PC <- PC + 2  incrementado automaticamente contando com byte extra
PS.B <- 1
Stack <- PS ; Bit 
PC <- ($FFFE)
Endereçamento
Imediato BRK #$NN
PS - Flags afetadas
N: -
V: -
B: 1 ;quando PS salvo na stack. ignorado em RTI ou PLP
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.

A instrução RTI é utilizada ao finalizar de uma subrotina de interrupção(ISR) para retornar a o fluxo de execução após seu término. Um byte e um endereço de 16-bits contidos no topo da Pilha são transferido para os registradores PS e PC respectivamente. O endereço restaurado no PC aponta para a próxima instrução do fluxo antes da interrupção.


Operação
PS <- (SP)
PC.LSB < - (SP + 1)
PC.MSB <- (SP + 2)
Endereçamento:
Implícito RTI
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.

Para entender essa instrução é recomendada a leitura sobre Arquitetura: Interrupções e VDI e também a flag B em Registradores.

  1. 11/05/2026 - revisão 5 - Ajustes: objetivos, descrições e sintaxes; Adição: info. flags I em BRK
  2. 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
  3. 11/09/2024 - revisão 3 - adição de flags afetadas e correções em introdução e JSR, RTS, RTI e BRK
  4. 30/08/2024 - revisão 2 - Correção em links de objetivos
  5. 04/10/2023 - revisão 1 - adição de links, correção em layout e navegação
  6. 28/04/2023 - versão inicial