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.