Informática Numaboa - Tutoriais e Programação
Cap. IV - Condições e Loops
Dom 16 Dez 2007 14:03 |
- Detalhes
- Categoria: MASM + RadASM
- Atualização: Quinta, 18 Junho 2009 11:18
- Autor: Alan Moreno
- Acessos: 10193
Também podemos fazer comparações utilizando instruções:
Destino - podem ser variáveis e registradores de 8, 16, 32 bits. Fonte - podem ser variáveis, registradores e valores inteiros.
Esta instrução compara os dois operandos e, por sua vez, modifica as bandeiras AF, CF, OF, PF, SF, ZF do microprocessador.
Esta instrução salta até um endereço. Vejamos a tabela de alguns saltos e seus significados:
Instrução | Descrição | Estado das bandeiras |
JA | saltar se estiver acima | CF=0 e ZF=0 |
JAE | saltar se estiver acima ou for igual | CF=0 |
JB | saltar se estiver abaixo | CF=1 |
JBE | saltar se estiver abaixo ou for igual | CF=1 ou ZF=1 |
JE | saltar se for igual | ZF=1 |
JG | saltar se for maior | ZF=0 ou SF = OF |
JGE | saltar se for maior ou igual | SF = OF |
JL | saltar se for menor | SF != OF |
JLE | saltar se for menor ou igual | ZF=1 ou SF != OF |
JMP | saltar diretamente | - |
JNA | saltar se não estiver acima | CF=1 ou ZF=1 |
JNAE | saltar se não estiver acima ou for igual | CF=1 |
JNB | saltar se não estiver abaixo | CF=0 |
JNBE | saltar se não estiver abaixo ou for igual | CF=0 e ZF=0 |
JNE | saltar se não for igual | ZF=0 |
JNG | saltar se não for maior | ZF=1 ou SF != OF |
JNGE | saltar se não for maior ou igual | SF != OF |
JNL | saltar se não for menor | SF = OF |
JNLE | saltar se não for menor ou igual | ZF=0 e SF = OF |
Pergunta: Para que serve o estado da bandeira ou Flag? Cada instrução e salto é executada se uma determinada condição for cumprida. Por exemplo:
JA será executado quando a bandeira CF for igual a 0 e ZF também for igual a zero.
JBE será executado quando a bandeira CF for igual a 1 ou ZF for igual a 1.
Reparem que JMP não tem condição. Isto significa que essa instrução não precisa de nenhuma condição para ser executada.
É por isso que a instrução CMP modifica essas bandeiras, é para que o salto colocado na linha seguinte possa ser executado.
Então vamos analisar o prog006, onde encontraremos o seguinte:
Primeiro utilizamos CMP para comparar EAX com a constante IDYES. Se não forem iguais, saltará para a etiqueta Fim; se coincidir, mostrará a mensagem.
Este exercício seria o mesmo que o prog005. A diferença é que não utilizamos o bloqueio .if. Façamos o mesmo com o prog005b usando instruções:
Para fazer comparações com instruções, devemos saber cada significado dos saltos.
Agora utilizaremos as bibliotecas rvlcnrand.lib para gerar um valor aleatório e a biblioteca masm.lib, porque será usada a função dwtoa para mostrar o resultado.
Quando a mensagem será mostrada?
A mensagem será mostrada quando EAX for menor que 5
A mensagem será mostrada quando EAX for maior que 10
O valor será mostrado quando nenhuma condição for cumprida.