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.