next up previous contents
Next: Instruções para subrotinas Up: Codificação binária Previous: Instruções de transferência   Sumário

Instruções de desvios

Há duas instruções que permitem a especificação de desvios incondicionais, JMP e BRA. A instrução JMP tem como operando um endereço, enquanto que BRA recebe como operando um deslocamento relativo à posição corrente do programa.

A instrução de desvio incondicional JMP tem o formato

    0100111011.mmm.rrr
onde mmm.rrr são respectivamente os campos de modo e registrador do operando. Apenas os modos (An), d(An), d(An,Ri), Abs.W, Abs.L, d(PC) e d(PC,Ri) -- denominados modos de endereçamento de controle -- são válidos.

A codificação da instrução BRA pode ocupar uma ou duas palavras:

    01100000.ssssssss
    llllllll llllllll
Caso o deslocamento especificado possa ser representado em 8 bits (em complemento de 2), apenas o campo ssssssss estará presente, e a segunda palavra é omitida. Caso o deslocamento requeira 16 bits para sua representação, então o campo ssssssss deverá ser zerado, e o deslocamento será representado na segunda palavra da instrução.

A instrução de desvio condicional, Bcc, especifica que o desvio só será tomado quando a condição cc -- avaliada a partir dos flags de condição no registrador de estado CCR -- for verdadeira. A codificação desta instrução tem o formato

    0110.ffff.ssssssss
    llll llll llllllll
onde tttt é a codificação binária para cada uma das condições (cc), enquanto que os campos restantes são equivalentes à instrução BRA. Os códigos de condição e codificação correspondentes são apresentados na Tabela B.2.


Tabela: Códigos de condição.
cc condição expressão tttt
CC carry clear $ \overline{C}$ 0100
CS carry set $ C$ 0101
EQ equal $ Z$ 0111
GE greater or equal $ N\cdot V + \overline{N}\cdot\overline{V}$ 1100
GT greater than $ N\cdot V\cdot\overline{Z} + \overline{N}\cdot\overline{V}\cdot\overline{Z} $ 1110
HI high $ \overline{C}\cdot\overline{Z}$ 0010
LE less or equal $ Z + N\cdot\overline{V} + \overline{N}\cdot V$ 1111
LS low or same $ C + Z$ 0011
LT less than $ N\cdot\overline{V} + \overline{N}\cdot V$ 1101
MI minus $ N$ 1011
NE not equal $ \overline{Z}$ 0110
PL plus $ \overline{N}$ 1010
VC overflow clear $ \overline{V}$ 1000
VS overflow set $ V$ 1001


O mapeamento entre estas condições e testes lógicos ``convencionais'' (apresentados aqui na sintaxe de C) é apresentado nas Tabelas B.3 para números com sinal e B.4 para números sem sinal.


Tabela: Relacionamento entre testes e condições para números com sinal.
Teste C Instrução 68K
< BLT
<= BLE
== BEQ
>= BGE
> BGT
!= BNE



Tabela: Relacionamento entre testes e condições para números sem sinal.
Teste C Instrução 68K
< BCS
<= BLS
== BEQ
>= BCC
> BHI
!= BNE


Observe que o deslocamento em BRA e Bcc é relativo ao conteúdo corrente do registrador PC (a posição da instrução mais 2), de modo que não é possível estabelecer um desvio para a próxima instrução usando o campo de 8 bits -- o valor do deslocamento seria 0, o que forçaria a leitura da palavra seguinte para a obtenção do deslocamento de 16 bits.

Uma outra instrução, DBcc, permite agregar um decremento em um registrador de dados e a especificação de um desvio condicional. Esta instrução tem por objetivo facilitar a implementação de desvios associados a laços de iteração (equivalente à forma until presente em algumas linguagens de alto nível). Sua sintaxe de uso é

    DBcc Dn,<label>
onde <label> identifica um rótulo da posição de destino, que deve ser traduzido para um deslocamento de 16 bits relativo ao PC na codificação da instrução. Esta instrução primeiro testa a condição para verificar se a condição de término do laço foi alcançada. Caso sim, então passa-se à próxima instrução. Caso não tenha sido alcançada a condição de término, então a palavra no registrador especificado é decrementada. Quando o resultado for -1, então o contador foi esgotado e passa-se à próxima instrução. Se o resultado não for -1, então o desvio é tomado.

A codificação desta instrução é

    0101.tttt.11001.rrr
    llll llll lllll lll
onde tttt é o código da condição, rrr identifica o registrador de dados que estará atuando como contador e l...l é o deslocamento de 16 bits relativo ao registrador PC. Além das formas de condição especificadas para Bcc, as condições F (false, código 0001) e T (true, código 0000) podem ser especificadas para esta instrução.


next up previous contents
Next: Instruções para subrotinas Up: Codificação binária Previous: Instruções de transferência   Sumário
Ivan L. M. Ricarte 2003-02-14