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.