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 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.
JMP - Jump - Pulo/Desvio Incondicional
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
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 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
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
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
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
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
Ex:
;trecho omitido
CALL funcao1 ; Invoca funcao
CALL funcao2 ;
;
;
;
funcao1:
;trecho omitido
RET
Ccc - Chama/Invoca Subrotina com Condicional
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
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
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 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
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 condição
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
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
;carregamento de dados
RST 7
;carregamento de dados
RST 6
Histórico de atualizaçõ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.