Instrucoes de Salto Condicional e Incondicional
As instruções de um programa são executadas de uma
forma sequencial pelo microprocessador. A CPU extrai uma instrução de memória,
interpreta-a e executa-a para a seguir ler a instrução imediata na memória.
Existe um conjunto de instruções de grande importância
que permite ao microprocessador executar instruções que não se seguem
fisicamente na memória, isto é, a CPU tem a possibilidade de, durante a execução
de um programa, endereçar diversas zonas da memória.
Durante a execução de um programa o contador de
programa (PC) contém o endereço da posição de memória que contém a instrução
a executar. Depois de executada a instrução o PC é incrementado uma unidade
(ou o número de bytes da instrução executada se tiver mais de um byte) endereçando
a instrução que de imediato se segue.
Quando a CPU executa uma instrução de
salto (JUMP) o novo endereço da memória é armazenado no registo PC, extraindo
a CPU de seguida a instrução correspondente à célula endereçada (fig. 26).

0 modo de endereçamento pode ser imediato, relativo
ou indirecto. No modo imediato os dois bytes que se seguem ao código de instrução
representam o endereço da célula de memória para onde o processamento deve
saltar. No caso do modo de endereçamento relativo há que adicionar ao conteúdo
do contador de programa (PC) um valor e para obter o novo endereço onde o
processamento deve continuar. No endereçamento indirecto o endereço da posição
de memória para onde o processamento deve saltar encontra-se no par HL ou num
dos registos de índice (IX e IY).
0 grupo de instruções de salto condicional faz uso
de diversas condições que se podem especificar de modo que o salto só se
efectue se as condições prévias forem satisfeitas. Se estas condições não
se verificarem o processamento prossegue sequencialmente com a instrução.

imediatamente a seguir à de salto. Todas as
condições estão dependentes do valor dos bits do registo de flags.
JP: Instruções de Salto Incondicional
As instruções de salto incondicional podem-se
dividir em dois grupos consoante o método utilizado para obter o endereço da célula
de memória onde reside a próxima instrução a ser executada.
1) Endereçamento imediato
A instrução JP (JUMP) de salto incondicional
com endereçamento imediato leva a CPU a passar o processamento para a posição
de memória endereçada pelos seus dois últimos bytes. Com efeito, o segundo e
terceiro bytes da instrução JP são armazenados no contador do programa
dando-se, assim, um salto para qualquer zona da memória. 0 byte de menor ordem
do endereço corresponde ao segundo byte da instrução JP, o byte de maior
ordem corresponde ao terceiro byte da mesma instrução (fig. 26).
0 código da instrução de salto incondicional tem o
seguinte formato:
Como facilmente se verifica, esta instrução emprega
para o endereçamento o modo imediato.
2) Endereçamento indirecto
A instrução de salto incondicional com endereçamento
indirecto envia o processamento para a posição de memória cujo endereço está
armazenado no par HL ou num dos registos de índice IX e IY.
A instrução que utiliza o par HL é constituída
por único byte e tem o seguinte formato:

Se utilizarmos um registo de índice de 16 bits para o endereçamento a instrução correspondente será formada por dois bits com o código máquina:

Estas três instruções permitem que os saltos
num programa sejam função de operações (cálculos) efectuadas anteriormente.
JP: Instrução de Salto Condicional
As flags de zero, carry, paridade e sinal são
utilizadas como teste de modo a decidir se um determinado salto, da ordem
sequencial do programa, se efectua ou não.
As instruções de salto condicional são muito
importantes num microprocessador pois permitem que se teste o registo de flags.
Por sua vez, o registo de flags é vital para um microprocessador porque
representa o meio de se determinar qual o processamento a seguir, sempre que uma
operação encerra mais de um resultado possível.
As condições que podem ser testadas são as
seguintes:

0 valor dos bits CCC define no código de operação
a condição a testar:
JPCC,nn
PC←nn (se a condição de verificar)
CCC - referidas na tabela anterior

Esta instrução é formada por três bytes e
utiliza endereçamento imediato. 0 segundo byte contém o byte de menor ordem do
endereço. 0 terceiro byte da instrução contém o de maior ordem do endereço
da posição de memória para onde o processamento prossegue se a condição CCC
for satisfeita.
Na tabela 26 encontra-se um resumo dos códigos
hexadecimais destas instruções.

Tab.26
– Grupo de salto
JR: Instrução de Salto Relativo Condicional e
Incondicional
Nas instruções de salto relativo é
especificado, no código de instrução, um valor que adicionado ao conteúdo do
contador de programa determina o novo endereço para onde deve passar o
processamento.
Este modo de endereçamento relativo permite a
especificação de valores, a adicionar ao contador de programa, na forma de
complemento para dois, abrangendo a gama de - 126 a + 129. Se se pretende que o
contador de programa sofra um incremento de e unidades, então o valor que deve
ser especificado no segundo byte da instrução será e-2, conforme é descrito
na figura 27.

Repare-se que quando a CPU extrai o código da instrução
JR o contador de programa é automaticamente incrementado de duas unidades. E
por isso que para se obter um salto de valor e em relação ao endereço da
instrução JR (A), é necessário especificar não o valor e mas sim o valor
e-2. Devido a este facto a gama dos números positivos é aumentada de duas
unidades (+ 129-2= +127, máximo possível de representar com 7 bits) e a dos
negativos diminuída também de duas unidades (-126-2==128, mínimo possível de
representar com 7 bits em complemento para dois).
A instrução de salto relativo pode ser efectuada
incondicionalmente, isto é, o microprocessador ao encontrar a instrução JR
adiciona imediatamente ao conteúdo do PC o valor especificado no segundo byte
da instrução. Por outro lado, a instrução JR pode ser executada, apenas, de
um modo condicional, isto é, a CPIJ testa uma determinada flag e, consoante o
resultado do teste for verdadeiro ou falso, executa o salto relativo ou
prossegue sequencialmente o programa.
1 - JR incondicional
A instrução JR e incondicional tem o seguinte código
máquina:

2 - JR condicional
As instruções JR (jump relative) condicionais são
em número de quatro e testam dois bits do registo de flags: Z e C. A condição
que se deve verificar para a realização do salto tanto pode ser a flag conter
o valor 1 como o valor 0. Se a condição não se verificar o processamento
prossegue, sequencial mente, com a extracção do código da instrução que
imediatamente se segue na memória.
As instruções de salto relativo condicional têm os
seguintes códigos:

DJINZ:
Decrement and Jump-if-non zero
A instrução de «decremento e salto se diferente de
zero» é particularmente importante em qualquer espécie de ciclo (loop)
interactivo.
Quando esta instrução é executada o registo B é
decrementado uma unidade. Se o conteúdo do registo, depois de decrementado, for
igual a zero, a próxima instrução sequencial é executada. Se depois de
decrementado o conteúdo do registo, B for diferente de zero, então ocorrerá
um salto relativo em que o conteúdo do contador de programa passará a ser:
PC<--PC+e. Mais uma vez o segundo byte da instrução DJNZ conterá o valor
e-2 à imagem do que sucedia nas instruções anteriores de salto relativo.
A instrução DJNZ tem o seguinte código binário:

Fizemos referência a todas as instruções JUMP (salto) que o microprocessador Z80 pode executar. Nenhuma destas instruções provoca alteração no registo de flags. Na tabela 26 estão indicados os códigos hexadecimais de todas as instruções de salto incondicional e condicional (instruções JP, JR e DJNZ).