[list][FONT="Lucida Console"][U][B]Buscador.asm[/B][/U]
org 0100h
mov dx, offset msg1
mov ah, 9
int 21h [COLOR="SeaGreen"];Imprime mensaje uno[/COLOR]
[COLOR="SeaGreen"];ETAPA UNO[/COLOR]
lea SI,cadena
ent_cadena:
mov ah,07h
int 21h [COLOR="SeaGreen"];Espera entrada de teclado[/COLOR]
cmp al,13
je ter_cadena
mov [SI],al
inc SI
mov dl,al
mov ah,02h
int 21h [COLOR="SeaGreen"];Salida en pantalla[/COLOR]
loop ent_cadena
ter_cadena:
mov [si],"$" [COLOR="SeaGreen"];Señal de fin[/COLOR]
mov dx, offset msg2
mov ah, 9
int 21h [COLOR="SeaGreen"];Imprime mensaje dos[/COLOR]
lea SI,palabra
ent_palabra:
mov ah,07h
int 21h [COLOR="SeaGreen"];Espera entrada de teclado[/COLOR]
cmp al,13
je ter_palabra
mov [SI],al
inc SI
mov dl,al
mov ah,02h
int 21h [COLOR="SeaGreen"] ;Salida en pantalla[/COLOR]
loop ent_palabra
ter_palabra:
mov [si],"$" [COLOR="SeaGreen"];Señal de fin[/COLOR]
[COLOR="SeaGreen"];ETAPA DOS[/COLOR]
xor bx,bx [COLOR="SeaGreen"];inicia BX primer indice dentro de la cadena[/COLOR]
jmp j2_ini [COLOR="SeaGreen"];salta a instruciones recurentes[/COLOR]
c1_cadena:
mov al,offset palabra[di] [COLOR="SeaGreen"];Guarda dato de palabra en AL, a comparar[/COLOR]
cmp al,"$" [COLOR="SeaGreen"];Control fin de palabra, dato de palabra con "$" [/COLOR]
jz encontrado [COLOR="SeaGreen"] ;"$" de fin de palabra, si es asi, palabra existe, entonces es "encontrado" [/COLOR]
cmp offset cadena[bx+si],"$" [COLOR="SeaGreen"] ;Control fin de cadena[/COLOR]
jz no_existe [COLOR="SeaGreen"] ;"$" de fin de cadena, si es asi, palabra "no existe" en cadena[/COLOR]
cmp offset cadena[bx+si],al [COLOR="SeaGreen"] ;Compara dato de cadena con dato de palabra, antes guardado en AL[/COLOR]
jnz j1_cadena [COLOR="SeaGreen"] ;salta si no es igual al dato[/COLOR]
[COLOR="SeaGreen"] ;sigue si los datos de cadena y palabra son iguales[/COLOR]
inc si [COLOR="SeaGreen"] ;siguiente dato en cadena, apuntado por SI, segundo indice de cadena[/COLOR]
inc di [COLOR="SeaGreen"] ;siguiente dato en palabra, apuntado por DI, indice de palabra[/COLOR]
jmp c1_cadena [COLOR="SeaGreen"] ;continua con los siguientes datos[/COLOR]
j1_cadena:
inc bx [COLOR="SeaGreen"] ;incrementa primer indide de cadena, nuevo dato[/COLOR]
j2_ini:
xor si,si [COLOR="SeaGreen"] ;inicia a cero segundo indice para cedana[/COLOR]
xor di,di [COLOR="SeaGreen"] ;inicia a cero indice para palabra[/COLOR]
jmp c1_cadena [COLOR="SeaGreen"] ;continua atravez de la cadena buscar, via bx como indice[/COLOR]
[COLOR="SeaGreen"];ETAPA TRES[/COLOR]
encontrado:
mov dx, offset msg3
mov ah, 9
int 21h [COLOR="SeaGreen"] ;Imprime mensaje 3[/COLOR]
jmp salida
no_existe:
mov dx, offset msg4
mov ah, 9
int 21h [COLOR="SeaGreen"] ;Imprime mensaje 4[/COLOR]
salida:
mov ah,07h
int 21h [COLOR="SeaGreen"] ;Espera entrada de teclado[/COLOR]
ret [COLOR="SeaGreen"] ;vuelve a Sistema[/COLOR]
Msg1 db "Entre cadena: $"
msg2 db 0Dh,0Ah,"Entre oalabra: $"
msg3 db 0Dh,0Ah,"ENCONTRADO$"
msg4 db 0Dh,0Ah,"NO EXISTE$"
cadena db 256 dup(' ')
palabra db 16 dup(' ')[/FONT]
[/list]