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

As instruções de controle de fluxo são responsáveis por mudar ou alterar o fluxo de execução para outro local do programa ou subrotina.

As instruções JUMP, JSR e BRA desviam o fluxo de forma incondicional enquanto Bcc, Dbcc desviam o fluxo de forma condicional.

Abaixo, a notação utilizada ao longo dos tópicos abordados nesta parte do tutorial:

Tab. 1: Notação utilizada
Símbolo Descrição
-> Atribuição
CCR
- Não sofre alteração

Para informações sobre registradores, visite Registradores e para mais informações sobre modos de endereçamento, visite Modos de Endereçamento.

Com a instruçção JMP podemos desviar o fluxo normal de execução para algum outro lugar dentro de um programa. Apenas os registradores PC e CCr são alterados.

Operação
PC <- destino
Endereçamento Origem
(Ax), n(Ax), n(Ax,Dx[.W|.L]|Ax[.W|.L]), n(PC), n(PC,Dx[.W|.L]|Ax[.W|.L]) absoluto.W, absoluto.L
Tamanho do dado
Longword
CCR
X: -
N: -
Z: -
V: -
C: -
Sintaxe
JMP label
JMP imediato.L
Ex
; omitido
JMP label
; omitido
JMP $8000
; omitido
JMP $180000

A instrução JSR desvia o fluxo de execução para um subrotina. Antes do desvio ocorrer, o endereço da próxima instrução após a JSR, é salva na pilha(Stack) para posterior restauração/retorno ao fluxo de execução anterior.

Operação
SP <- SP - 4
(SP) <- PC
PC <- destino
Endereçamento Origem
-
Endereçamento Destino
(Ax), n(Ax), n(Ax,Dx[.W|.L]|Ax[.W|.L]), n(PC), n(PC,Dx[.W|.L]|Ax[.W|.L]), absoluto.W, absoluto.L e #imediato
Tamanho do dado
Longword
CCR
X: -
N: -
Z: -
V: -
C: -
Sintaxe
JSR (Ax)
JSR absoluto.W
JSR absoluto.L
Ex
JSR (Ax)
;omitido
JSR $FFFF
;omitido
JSR $FFFF00

A instrução BRA é semelhante a instrução JMP, mas utiliza o endereço efetivo com os tamanhos Byte(-128 a 127) e Word(-32,768 a 32,767) sinalizados. Assim o desvio de fluxo é feito para subrotinas próximos ao PC corrente.

Como a instrução utiliza Byte e Word sinalizados como endereço, o tamanho total da instrução é menor que as instruções JMP e JSR.

Operação
PC <- PC + valor_sinalizado
Endereçamento Origem
#imediato.B
#imediato.W
Tamanho do dado
Byte e Word
CCR
X: -
N: -
Z: -
V: -
C: -
Sintaxe
BRA label
BRA #imediato
Ex
; omitido
BRA label
; omitido
BRA $8000
; omitido

A instrução BSR, é semelhante a instrução BRA, mas desvia o fluxo de execução para um subrotina. Antes da execução, um endereço de retorno da próxima instrução é salvo na pilha para posterior restauração/retorno do fluxo de execução com a instrução RTS.

Operação
SP <- SP - 4
(SP) <- PC
PC <- destino + valor_sinalizado
Endereçamento Origem
-
Endereçamento Destino
imediato.B
imediato.W
Tamanho do dado
Byte, Word
CCR
X: -
N: -
Z: -
V: -
C: -
Sintaxe
BSR label
BSR.B imediato
BSR.W imediato
Ex
BSR label
BSR.B #$FF
BSR.W #$8000

A instrução Bcc, é semelhante a instrução BRA, mas utiliza as flags do registrador CCR(cc) para determinar se o desvio será feito ou não.

Operação
se cc = 1|0 entao PC <- PC valor_sinalizado
Endereçamento Origem
imediato.B
imediato.W
Endereçamento Destino
-
Tamanho do dado
Byte, Word
CCR
X: -
N: -
Z: -
V: -
C: -

Abaixo a tabela contendo os possíveis valores para as condições cc mencionadas acima:

Tab. 2: Tabela de condições cc
Sigla(cc) Descrição Lógica
CC Carry Clear C = 0
CS Carry Set C = 1
EQ EQual Z = 1
GE Greater than or Equal -
GT Greater than -
HI Higher than C = 0 + Z = 0
LE Less than or Equal -
LS Lower than or Same C=1 + Z=1
LT Less than N=1 + V=0, N=0 + V=1
MI Minus N = 1
NE Not Equal Z = 0
PL Plus N = 0
VC oVerflow Clear V = 0
VS oVerflow Set V = 1
Sintaxe
Bcc label
Bcc imediato.L
Ex
BEQ label
BNE label

A instrução DBcc é utilizada quando trabalhamos com loops. A DBcc é semelhante a instrução Bcc em relação a validação das condições cc para desvio de fluxo, mas utiliza um registrador de dados como contador que é decrementado a cada loop.

A instruções seguinte a DBcc é sempre obtida pela expressão PC + 2 e o endereço de desvio é baseado em um valor Word sinalizado.

O fim da execução da instrução DBcc acontece quando o conteúdo do registrador de dados utilizado é igual a -1. Caso contrário o desvio do loop é feito.

Operação
se cc falso
    Dx <- Dx - 1
    se Dx = -1
       PC <- PC + 2
    senao
       PC <- PC + (+/-)valor_imediato
senao PC <- PC + 2
Endereçamento Origem
Dn
Endereçamento Destino
imediato.W
Tamanho do dado
Word
CCR
X: -
N: -
Z: -
V: -
C: -

Abaixo a tabela contendo os possíveis valores para as condições cc mencionadas acima:

Tab. 3: Tabela de condições cc
Sigla(cc) Descrição Lógica
CC Carry Clear C = 0
CS Carry Set C = 1
EQ EQual Z = 1
GE Greater than or Equal -
GT Greater than -
HI Higher than C = 0 + Z = 0
LE Less than or Equal -
LS Lower than or Same C=1 + Z=1
LT Less than N=1 + V=0, N=0 + V=1
MI Minus N = 1
NE Not Equal Z = 0
PL Plus N = 0
VC oVerflow Clear V = 0
VS oVerflow Set V = 1
Sintaxe
DBcc Dx,label
DBcc imediato.L
Ex
;omitido
MOVE #E,D0 ; 16 vezes. Como vai até -1, N-1 deve ser utilizado
inicio_loop:
;omitido
DB D0, inicio_loop

A instrução RST e utilizada em conjunto com as instruções JSR e BSR. Ao fim de uma subrotina no 68K é necessário utilizar a instrução RTS para restaurar o fluxo de execução a partir da instruçção posterior a JSR ou BSR.

Operação
PC <- (SP)
SP <- SP + 4
Endereçamento Origem
-
Tamanho do dado
Longword
CCR
X: -
N: -
Z: -
V: -
C: - 
Sintaxe
RTS
Ex
;...
JSR SUBROTINA
MOVE D0,D1   ;continua fluxo daqui
;...
;...
SUBROTINA:
;...
RTS ; <- fim 
  1. 05/09/2024 - Revisão 2 - Correção em erros gramaticais e na descrição de BRA e RTS
  2. 30/08/2024 - revisão 1 - Correção em link Bcc e RTS
  3. 08/04/2024 - versão inicial