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

  1. Instruções de controle de fluxo
  2. Instrução JMP
  3. Instrução Bcc
  4. Instrução JSR
  5. Instrução RTS
  6. Instrução BRK
  7. Instrução 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.

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 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
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. 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
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

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
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.

Operação
Stack <- PC + 2
PS.B <- 1
Stack <- PS
PC <- ($FFFE)
Endereçamento
Imediato BRK #$NN
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.

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:
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.

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