Objetivos
Instruções para Controle de Fluxo
As instruções de controle de fluxo são utilizadas para desviar o fluxo de execução de
alterando o conteúdo do registrador PC para apontar para um novo local.
Esse tipo de instrução é utilizado para tomada de decisões, executar código em loop,
chamada de subrotinas e outros.
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 16-bits contido em HL |
| <- |
Atribuição |
Mais informações sobre os registradores e flags podem ser vistas
em Registradores e Flags.
JMP - Jump - Pulo/Desvio Incondicional
A instrução JMP desvia o fluxo de execução para um endereço imediato de 16-bits
atribuído ao PC apontando para o novo local onde a execução deve continuar.
Operação
PC <- $NNNN
ou
PC <- nome_local
Endereçamento
F(Flags)
S: -
Z: -
Ac:-
P: -
Cy:-
Ex:
inicio: ; função
JMP fim
; codigo omitido
;
fim:
JMP inicio
Jcc - Pulo/Desvio Condicional
As instruções de Jcc são executadas sobre condições específicas de uma ou mais flags de
status. Um endereço imediato é atribuído ao PC, após a verificação das flags, que realiza um
um desvio para o novo local onde a próxima instrução deve ser executada.
Operação
PC <- $NNNN
Endereçamento
cc:
NZ:Jump se flag Z = 0
Z: Jump se flag Z = 1
NC:Jump se flag C = 0
C: Jump se flag C = 1
PO:Jump se flag P = 0
PE:Jump se flag P = 1
P: Jump se flag S = 0
M: Jump se flag S = 1
Onde
NZ:Not Zero
Z: Zero
NC:Not Carry
C: Carry
PO:Parity Odd
PE:Parity Even
P: Plus/Positive
M: Minus/Negative
Ex:
F(Flags)
S: -
Z: -
Ac:-
P: -
Cy:-
MVI #$01
MVI B,#$FF
ADD A,B ; 01 + FF = 00 , Cy = 1
JC funcao ; Jmp se C = 1
PCHL - Transfere HL para PC
A instrução PCHL move/transfere o endereço de 16-bits contido no registrador HL para
o PC e desvia o fluxo de execução para o novo endereço causando assim um JMP
incondicional.
Operação
PC <- HL
Endereçamento
F(Flags)
S: -
Z: -
Ac:-
P: -
Cy:-
Ex:
;trecho omitido
LXI H, funcao
PCHL ; PC <- funcao
;
;
funcao:
MVI A, #$ff
;omitido
RET
CALL - Call Subrotine - Chama/Invoca Subrotina
A instrução CALL é utilizada para desviar o fluxo de execução para uma subrotina. O
endereço da próxima instrução, após CALL, é salvo na Stack e o endereço imediato
é transferido para o PC que desvia a execução para a subrotina.
A diferença entre as instruções de JMP, Jcc e CALL é que a instrução CALL
obrigatóriamente deve conter a instrução RET(Return) para que o fluxo de execução normal continue
após a instrução CALL.
Operação
(SP) <- PC + 3 ; próxima instrução
SP <- SP - 2
PC <- endereço_subrotina
Endereçamento
F(Flags)
S: -
Z: -
Ac:-
P: -
Cy:-
Ex:
;trecho omitido
CALL funcao1 ; Invoca funcao
CALL funcao2 ;
;
;
;
funcao1:
;trecho omitido
RET
Ccc - Chama/Invoca Subrotina com Condicional
As instruções Ccc são executadas sobre condições específicas de uma ou mais flags de
status. Um endereço imediato é atribuído ao PC, após a verificação das flags, que executa
uma instrução CALL para o local da subrotina.
Operação
(SP) <- PC + 3 ; próxima instrução
SP <- SP - 2
PC <- $NNNN
Endereçamento
cc:
NZ:Call se flag Z = 0
Z: Call se flag Z = 1
NC:Call se flag C = 0
C: Call se flag C = 1
PO:Call se flag P = 0
PE:Call se flag P = 1
P: Call se flag S = 0
M: Call se flag S = 1
Onde
NZ:Not Zero
Z: Zero
NC:Not Carry
C: Carry
PO:Parity Odd
PE:Parity Even
P: Plus/Positive
M: Minus/Negative
F(Flags)
S: -
Z: -
Ac:-
P: -
Cy:-
Ex:
MVI #$01
MVI B,#$FF
ADD A,B ; 01 + FF = 00 , Cy = 1
CC subrotina ; Call se C = 1
RET - Return From Subrotine - Retornar de Subrotina
A instrução RET é utilizada em uma subrotina para informar que "chegou em seu fim" e
que o retorno do fluxo de anterior deve ser feito. O endereço de retorno salvo na Stack
ao executar Call ou Cccc é transferido para o registrador PC onde o fluxo de execução
deve continuar.
Operação
PC <- (SP)
SP <- SP + 2
Endereçamento
Ex:
;trecho de codigo
;
CALL funcao1 ; Invoca funcao
CALL funcao2 ; endereço salvo na pilha para continuação (1)
;
;
funcao1:
;trecho omitido
RET ; retorna para fluxo (1)
;
;
funcao2:
;trecho omitido
RET ;
Rcc - Retornar de subrotina com condicional
As instruções de Rcc são instruções semelhantes RET, mas são
executadas sobre condições específicas das flags. O endereço de retorno salvo na Stack
ao executar Call ou Ccc, após a verificação das flags, é transferido para o
registrador PC onde o fluxo de execução deve continuar.
Operação
PC <- (SP)
SP <- SP + 2
Endereçamento
cc:
NZ:RET se flag Z = 0
Z: RET se flag Z = 1
NC:RET se flag C = 0
C: RET se flag C = 1
PO:RET se flag P = 0
PE:RET se flag P = 1
P: RET se flag S = 0
M: RET se flag S = 1
Onde
NZ:Not Zero
Z: Zero
NC:Not Carry
C: Carry
PO:Parity Odd
PE:Parity Even
P: Plus/Positive
M: Minus/Negative
Ex:
CALL funcao1 ; Invoca funcao1
CALL funcao2
;continua fluxo após RZ(1)
funcao1:
;omitido
MVI A, #$FF
INR A
RZ ; retorna se Z = 1 retorna para fluxo(1)
;omitido
A instrução RST é utilizada para invocar uma interrupção de software a partir de qualquer
parte do programa. Um valor de 8-bits imediato é informado como argumento para instrução
que irá desviar o fluxo até um endereço RST 0~7 no Vetor de Interrupções.
Operação
(SP) <- PC + 3
PC <- #N * 8
Endereçamento
;carregamento de dados
RST 7
;carregamento de dados
RST 6
Mais informações sobre interrupção podem ser vistas em
Interrupções.
Histórico de atualizações
- 12/05/2026 - revisão 4 - Ajustes: objetivos, intro e descrições ;
- 13/12/2024 - revisão 3 - Adição de RST; Correções em Ccc; ajustes pontuais
- 09/09/2024 - revisão 2 - Correção em descrição/exemplo de JMP, Jcc, Call, Ccc, Ret e Rcc
- 04/10/2023 - revisão 1 - Adição de links, correção em layout, navegação e flags Rcc, Ccc Jcc
- 08/08/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.