sexta-feira, 1 de outubro de 2010

Semana Assembly - Os Cinco Furiosos (Parte 4)

Veremos agora o primeiro dos comandos de repetição INDETERMINADOS, eles são chamados assim pois não sabemos (diferente do FOR) quando o comando terminará de repetir o laço. Veremos o comando WHILE, este comando possui a seguinte estrutura:

ENQUANTO algo não acontece
   repita isso

Para demonstrá-lo em Assembly, dessa vez aproveitando o clima de eleição, resolvi criar um programinha bem divertido, então não se assuste com seu tamanho pois está todo comentado, e recomendo que você o estude determinadamente:

include 'emu8086.inc'

ORG 100h

.data
cntA dw 0x000 ; Total de Votos para A
cntB dw 0x000 ; Total de Votos para B
cntI dw 0x000 ; Total de Votos invalidos

.code
printn "---------------------"

printn "Pesquisa"
printn "---------------------"
printn " A.Candidato A"
printn " B.Candidato B"
printn " 0.Fim"
printn "---------------------"

MOV ah, 1h    ; obter valor
INT 21h ;


laco:
CMP AL, '0'   ; verificar se 0
JE final      ; se sim terminar
CMP AL, 'A'   ; verifica se A
JE addA       ; se sim adicionar voto em A
CMP AL, 'B'   ; verifica se B
JE addB       ; se sim adicionar voto em B
JMP addI      ; adicionar voto a invalido
volta:
MOV ah, 1h    ; obter novo valor
INT 21h
JMP laco      ; retorna ao laco

addA:         ; adicionar voto em A
ADD cntA, 1
JMP volta
addB:         ; adicionar voto em B
ADD cntB, 1
JMP volta
addI:         ; adicionar voto em Invalido
ADD cntI, 1
JMP volta

final:
printn ""
printn "---------------------"
printn "Resultado foi:"
printn "---------------------"
print " Candidato A: "
MOV ax, cntA
CALL print_num
printn " votos"
print " Candidato B: "
MOV ax, cntB
CALL print_num
printn " votos"
print " Invalido: "
MOV ax, cntI
CALL print_num
printn " votos"

DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS
 
END
 
Veremos amanhã o último dos comandos e note como você já consegue desenvolver algumas coisinhas em Assembly, que afinal de contas não é uma linguagem tão complicada assim.
 
Abraços e até amanhã
Fernando Anselmo

0 comentários:

Postar um comentário