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).

<-- Voltar

Hosted by www.Geocities.ws

1