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 Jcc
  4. Instrução PCHL
  5. Instrução CALL
  6. Instrução Ccc
  7. Instrução RET
  8. Instrução Rcc
  9. Instrução RST
  10. Diagramas JMP, Jcc, Call, Ccc, Ret, Rcc

As instruções de controle de fluxo são utilizadas para desviar o fluxo de execução de um programa alterando o conteúdo do registrador PC para apontar para um novo local em um programa.

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.

A instrução JMP desvia o fluxo de execução para um endereço imediato não-sinalizado de 16-bits, que é atribuído ao PC, que irá apontar para o novo local onde a execução do código irá continuar.

Operação
PC <- $NNNN
PC <- nome_local
Endereçamento
Direto JMP $NNNN
Ex:
inicio: ; função
JMP fim
; codigo omitido
;
fim:
JMP inicio

As instruções de Jcc são executadas sobre condições específicas de uma ou mais flags de status do 8080. Um endereço imediato sinalizado é atribuído ao PC, após a verificação das flags, que realiza um JMP para o novo local onde o código de continuar a ser executado.

Operação
PC <- $NNNN
Endereçamento
Direto Jcc $NNNN
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:
MVI #$01
MVI B,#$FF 
ADD A,B ; 01 + FF = 00 , Cy = 1 
JC funcao ; Jmp se C = 1

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
Implícito PCHL
Ex:
;trecho omitido
LXI H, funcao
PCHL ; PC <- funcao
;
;
funcao:
MVI A, #$ff
;omitido
RET

A instrução CALL é utilizada para desviar o fluxo de execução para uma subrotina ou função. O endereço da próxima instrução, após CALL, é salvo na Stack e um endereço imediato de 16-bits é transferido para o registrador 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
Direto CALL $NNNN
Ex:
;trecho omitido
CALL funcao1 ; Invoca funcao
CALL funcao2 ; 
;
;
;
funcao1:
;trecho omitido
RET

As instruções de Ccc são executadas sobre condições específicas de uma ou mais flags de status do 8080. Um endereço imediato sinalizado é atribuído ao PC, após a verificação das flags, que realiza um CALL para o novo local onde o código de continuar a ser executado.

Operação
(SP) <- PC + 3 ; próxima instrução
SP <- SP - 2
PC <- $NNNN
Endereçamento
Direto Ccc $NNNN
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
Ex:
MVI #$01
MVI B,#$FF 
ADD A,B ; 01 + FF = 00 , Cy = 1 
CC subrotina ; Call se C = 1

A instrução RET é utilizada em uma subrotina para informar que "chegou em seu fim" e que o retorno do fluxo de execução de ser feito. O endereço de retorno salvo na Stack, ao executar Call ou Cccc, é transferido para o registrador PC que continua a execução normal do programa.

Operação
PC <- (SP)
SP <- SP + 2
Endereçamento
Implícito RET
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 ;

As instruções de Rcc são instruções semelhantes RET, mas são executadas sobre condições específicas das flags do 8080.

Operação
PC <- (SP)
SP <- SP + 2
Endereçamento
Direto Rcc $NNNN
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 em qualquer parte do programa. Um valor de 8-bits imediato é informado como argumento para instrução que irá desviar até um endereço RST 0~7 no VDI.

Operação
(SP) <- PC + 3
PC <- N*8
Endereçamento
Imediato RST #N
;carregamento de dados
RST 7
;carregamento de dados
RST 6
  1. 13/12/2024 - revisão 3 - Adição de RST; Correções em Ccc; ajustes pontuais
  2. 09/09/2024 - revisão 2 - Correção em descrição/exemplo de JMP, Jcc, Call, Ccc, Ret e Rcc
  3. 04/10/2023 - revisão 1 - Adição de links, correção em layout, navegação e flags Rcc, Ccc Jcc
  4. 08/08/2023 - versão inicial