La Web del Programador: Comunidad de Programadores
 
    Pregunta:  50023 - CANTIDAD DE VOCALES EN UNA CADENA
Autor:  david alujes
necesito saber como contar la cantidad de vocales que tiene una cadena,y la cantidad de cada vocal

  Respuesta:  Chaco Chaquito
Aqui esta, sufri mucho por esto...XD
.model small
.stack
.data
pide db 'Teclea una palabra',10,13,'$'
cad db 80 dup(' '),'$'

msg1 db 10,13,'a: $'
msg2 db 10,13,'e: $'
msg3 db 10,13,'i: $'
msg4 db 10,13,'o: $'
msg5 db 10,13,'u: $'

Aa db 0
Ee db 0
Ii db 0
Oo db 0
Uu db 0
.code
mov ax,@data
mov ds,ax

mov ah,00h
mov al,03h
int 10h

lea dx,pide
mov ah,09h
int 21h

lea si,cad
mov cx,0
lee:
mov ah,01h
int 21h
cmp al,'$'
je termina
mov [si],al
inc si
inc cx
jmp lee
termina:
lea si,cad
mov bl,0
ciclo:
mov al,[si]
mov dl,al

cmp dl,'a'
je sumaAs
cmp dl,'A'
je SumaAs

cmp dl,'e'
je SumaEs
cmp dl,'E'
je SumaEs

cmp dl,'i'
je SumaIs
cmp dl,'I'
je SumaIs

cmp dl,'o'
je SumaOs
cmp dl,'O'
je SumaOs

cmp dl,'u'
je SumaUs
cmp dl,'U'
je SumaUs

cmp dl,'$'
je FinCiclo
Sigue:
inc si
jmp ciclo
SumaAs:
inc Aa
jmp Sigue
SumaEs:
inc Ee
jmp Sigue
SumaIs:
inc Ii
jmp Sigue
SumaOs:
inc Oo
jmp Sigue
SumaUs:
inc Uu
jmp Sigue
FinCiclo:
lea dx,msg1
mov ah,09h
int 21h

mov dl,Aa
add dl,30h
mov ah,02h
int 21h

lea dx,msg2
mov ah,09h
int 21h

mov dl,Ee
add dl,30h
mov ah,02h
int 21h

lea dx,msg3
mov ah,09h
int 21h

mov dl,Ii
add dl,30h
mov ah,02h
int 21h

lea dx,msg4
mov ah,09h
int 21h

mov dl,Oo
add dl,30h
mov ah,02h
int 21h

lea dx,msg5
mov ah,09h
int 21h

mov dl,Uu
add dl,30h
mov ah,02h
int 21h

mov ah,4ch
int 21h
end

  Respuesta:  Francisco Carrillo
Bueno, pues lo primero que tienes que hacer es contar con cinco variables declaradas, cada una funcionará como acumulador de cada letra. Luego incializa dichas variables a 0 e inicias un ciclo donde vayas leyendo caracter por caracter la cadena mediante el uso del registro di o si(por ejemplo mov al, cadena[si]), previamente incializado en cero y compares si cadena[si] es igual a 'a' o a 'A'(
ciclo_cuenta_vocales:
...
...
...
cmp al, 'a'
je sumaAs
cmp al, 'A'
je sumaAs
cmp al, 'e'
je sumaEs
. ..
..
..
cmp al, '$'
je salir
sumaAS:
inc cuentaAs
....
....
inc di
jmp ciclo_cuenta_vocales
salir:
), luego si es cierto das un salto hacia una etiqueta que sea para incrementar el contador de a's(ver el ejemplo anterior), luego despues de de las comparaciones de las a`s pones la comparaciones y los saltos correspondientes a la 'e' o 'E' y haces lo mismo con todas las demás vocales , y al final pones un salto hacia el inicio del ciclo.El ciclo terminará cuando el caracter sea el que predefinas(en el ejemplo es el '$') el cual lo tendrás que insertar en la cadena al final ya sea al declararla o antes de inciar el ciclo.
Espero y la informacion te haya servido de algo