Esta función es transparente también, pero como usa bx para devolver datos este registro no se salvaguarda.
Usamos bl y bh como banderas, que nos indicarán si se ha encontrado la letra y si faltan letras por descubrir.
El código creo que es claro.
Tomamos las direcciones de la palabra seleccionada y de la mascara.
Vamos comparando la letra a buscar con cada letra de la palabra.
Si la encontramos la copiamos en la mascara y montamos la bandera de encontrada.
Verificamos si la mascara está en blanco. Si lo está es que no hemos encontrado nada en ningún intento, y por lo tanto quedan letras por encontrar. Por ello montamos la bandera de faltan letras.
Recorremos toda la palabra en busca de la letra y simultáneamente comprobamos la máscara.
BUSCAR
(c) José Angel Moneo Fdez
; busca la letra
; devuelve bl=1 si la encuentra la letra
; bh=1 si faltan letras
buscar proc near
push di
push si
push cx
mov bx,0 ;borra banderas
mov si,pal_sel
mov di,offset mascara
mov cl,[si] ;numero de letras a contador de busqueda
inc si ;salta la longitud de la palabra
prueba:
mov al,letra
cmp byte ptr [si],al ;comprueba la letra pasada en al
jne otra
mov [di],al ; almacena la letra en mascara
mov bh,1 ; marca bandera letra encontrada
otra:
cmp byte ptr [di],"_"
jne sigue
mov bl,1 ; bandera palabra incompleta
sigue:
inc si
inc di
dec cl
jnz prueba
pop cx
pop si
pop di
ret
buscar endp
No hay comentarios:
Publicar un comentario
Si tienes algún comentario, duda o sugerencia, o si quieres aportar algún código creado a partir de las librerías expuestas aquí, por favor, indícamelo.