Monitoria Comp Prog 2009

 

Dicas

Page history last edited by Fernando 5 mos ago

Uso do CMP com as instruções de desvio:

  Instrução    |                   Descrição                  |    Comparação (para CMP A,B)

--------------------------------------------------------------------------------------------

    JC         |  vai um = 1                                  |    A  < B (sem sinal)

    JZ         |  zero   = 1                                  |    A  = B

   JCZ         |  zero   = 1 OR vai um = 1                    |    A <= B (sem sinal)

   JSO         |  Negativo(Sinal) = Transbordou               |    A >= B (com sinal)

  JSONZ        |  Negativo(Sinal) = Transbordou AND zero = 0  |    A  > B (com sinal)

   JNC         |  vai um = 0                                  |    A >= B (sem sinal)

   JNZ         |  zero   = 0                                  |    A != B

   JNCZ        |  zero   = 0 AND vai um = 0                   |    A  > B (sem sinal)

   JNSO        |  Negativo(Sinal) != Transbordou              |    A  < B (com sinal)

  JZNSO        |  Negativo(Sinal) != Transbordou OR zero = 1  |    A <= B (com sinal)

Lista de Indicadores(Flags):

0.Negativo = Sinal

1.Paridade

2.Transbordou(Overflow)

3.Vai um/Pede Emprestado(Carry)

4.Zero

____________________________________________________________________________________________________________________________________________________________________________________________

Trasformando caracteres Maiusculos/Minusculos em caracteres Minusculos:

(Supondo que o caracter está guardado no registrador A)

OR A, 20h

Explicação:

Os caracteres são representados pelo seus valores da tabela Ascii, sendo:

A = 41h ou 65(decimal) ... Z = 5Ah ou 90(decimal)

a = 61h ou 97(decimal) ... z = 7Ah ou 122(decimal)

só de olhar dá para reparar que a diferença entre o A e o a é de 20h, isso já dá a suspeita que a operação acima pode fazer algum sentido, vamos olhar a representação em binário:

A = 0100 0001

a = 0110 0001 a diferença é de apenas 1 bit, vamos analisar mais alguns

B = 0100 0010 ... Z = 0101 1010

b = 0110 0010 ... z = 0111 1010

ficou claro que a diferença está sempre no 6° bit, é 20h é representado exatamente 0010 0000

como o OR faz uma lógica com os bits de mesma posição, e lembrando da tabela do OR:

0 OR 0 = 0

0 OR 1 = 1

1 OR 0 = 1

1 OR 1 = 1

Analisando então OR A, 20h:

0100 0001

   OR

0010 0000 vendo bit a bit: 1°)1 OR 1 = 1, 2°)0 OR 0 = 0, 3°)0 OR 0 = 0...

_________

0110 0001 = a

a mesma lógica pode ser aplicada a qualquer outra letra.

OBS: OR A, 20h, se A for um caractere minúsculo não o alterará em nada.

____________________________________________________________________________________________________________________________________________________________________________________________

Zerando um registrador com o XOR:

XOR A, A

Explicação:

A analise é muito parecida com a acima, vejamos a tabela do XOR:

0 XOR 0 = 0

0 XOR 1 = 1

1 XOR 0 = 1

1 XOR 1 = 0

agora assumindo um valor qualquer para o registrador A, por exemplo 59h, vejamos o binário:

A = 59h = 0101 1001

Analisando XOR A, A:

0101 1001

   XOR

0101 1001

_________

0000 0000

Como vemos todos os bits comparados sempre serão iguais(são o mesmo valor afinal de contas), e toda comparação de valores iguais no XOR vai resultar em 0.

Comments (0)

You don't have permission to comment on this page.