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