A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa - Tutoriais e Programação

Cap. IV - Condições e Loops

Dom

16

Dez

2007


14:03

(5 votos, média 5.00 de 5) 


Nível Intermediário

Masm32+RadASM

Capítulo IV: Condições e Loops

Escrito por: ^A|An M0r3N0^
Conselheiro: RedH@wk
Tradução: ~Uglinho~
O presente texto foi escrito para fins educacionais e de pesquisa e é de livre distribuição contanto que se preserve o conteúdo e os direitos do autor.

O Masm32 pode utilizar o bloqueio .if (condição) e também .while, .repeat/.until (Loops). Aprenderemos duas formas de utilizá-las. A primeira será utilizando bloqueios, a outra será usando instruções CMP e JXX.

Condições

Usando o bloqueio .IF - O MASM pode fazer comparações simples e complexas de forma fácil. Conheça a sintaxe.

Uma comparação simples seria desta maneira:

SimplesSimples mais .else
.if Condição ; Se cumprir a condição, faça algo aqui .endif .if Condição ; Se cumprir a condição, faça algo aqui .else ; Caso contrário, faça algo aqui .endif

Se desejar fazer comparações sequenciais:

SequencialSequencial mais .else
.if Condição ; Se cumprir a condição, faça algo aqui .elseif ; Se cumprir a condição, faça algo mais aqui .endif .if Condição ; Se cumprir a condição, faça algo aqui .elseif ; Se cumprir a condição, faça algo mais aqui .else ; Se não cumpriu nenhuma condição, ;faça algo aqui .endif

Antes de começar com os exercícios, observemos a seguinte tabela de operadores para as comparações:

Operadores de Comparação
==igual
!=não igual
>maior
>=maior ou igual
<menor
<=menor ou igual
Operadores de Multi-comparação
&&AND lógico "E"
||OR lógico "OU"
Operador para verificar o estado das bandeiras (flags) do processador
CARRY?bit do Carry setado
OVERFLOW?bit do Overflow setado
PARITY?bit da Paridade setado
SIGN?bit de Sinal setado
ZERO?bit do Zero setado

No exercício a seguir faremos uma série de comparações. Para isto utilizaremos a biblioteca rvlcnrand.lib para gerar valores inteiros aleatórios. Os algoritmos geradores foram criados por Randall Hyde, desenvolvedor do compilador HLA (High Level Assembly) e passado para o MASM32 por minha pessoa.

Biblioteca rvlcnrand.lib
FunçãoDescrição
randzimeCom esta função criamos um ponto ao acaso para que possa ser utilizado pelas 4 funções seguintes: random, range, uniform, urange. Desta maneira sempre se poderá gerar de forma aleatória.
randomGera números aleatórios uniformemente distribuídos utilizando um algoritmo linear. O resultado é devolvido em EAX.
Invoke random
rangeGera um número aleatório usando a função random, levando em conta o limite estabelecido. O resultado é devolvido em EAX.
Invoke range, inicio, final
uniformEsta função gera um novo número aleatório uniformemente distribuído em cada chamada. O resultado é devolvido em EAX.
Invoke uniform
urangeGera um número aleatório usando a função urange levando em conta o limite estabelecido. O resultado é devolvido em EAX.
Invoke urange, inicio, final

Informações adicionais