Escribir un código que verifique si una cadena es igual o es subcadena de otra:
org 100h
comienzo:
mov si, x; contador de posición de cadena
mov al, msg2[si]; copio el carácter a al
cmp msg[si], al ;comparar letra por letra las cadenas, si uno no
;coincide manda directamente a fin
;y termina el programa
jne no_iguales: ; si no son iguales compruebo subcadena
cmp msg[si], "$" ;si es el final quiere decir que son iguales
jz iguales:
inc x; incremento el contador
jmp comienzo
;******************************
;todavía pude ser subcadena
;******************************
no_iguales:
mov si, 0 ;ponemos el contador si en 0
comienzo_sub:
mov al, msg2[0] ;copiar la primera letra de la
;palabra a al
cmp msg[si],"$" ;si es el fin de la cadena mandar a final_no_iguales
jz final_no_iguales
cmp msg[si], al ;comparar si encuentra la primera letra de la cadena
jne seguir_sub ;si he encontrado la primera continuo
mov di, 1 ;poner en 1 den di
comprobar_sub:
mov al, msg2[di]
mov bx, di
cmp msg[si+bx], al ;compruebo la posición de la letra coincidente +si
jne seguir_sub ;si no coincide mandar a seguir
inc di ;incrementar di para seguir recorriendo cadena
cmp msg2[di],"$" ;si es el fin de la cadena y el programa
;y he llegado aqui es que es subcadena
jz si_es_subcadena
loop comprobar_sub ;bucle para recorrer
seguir_sub:
inc si ;para seguir recorriendo la palabra
loop comienzo_sub ;bucle principal para recorrer
si_es_subcadena:
mov dx, offset msg5 ;copiar msg3 a dx
mov ah, 9 ;preparar ah con 9 para la interrupción 21h
int 21h ;mostrar contenido en dx
final:
ret
final_no_iguales:
mov dx, offset msg4;paso el mensaje a dx
mov ah, 9;salida del string almacenado en dx y debe acabar en $
int 21h; interrupción 21h
ret
iguales:
mov dx, offset msg3;paso el mensaje a dx
mov ah, 9;salida del string almacenado en dx y debe acabar en $
int 21h; interrupción 21h
ret
msg db "hello world $";cadena base,db para poder hacer cmp
msg2 db "helloo $";db para poder copiarse a al
msg3 dw "Son iguales $"
msg4 dw "Son diferentes $"
msg5 dw "Si es subcadena $"
x dw 0
ret
Ejemplo de salida para las cadenas:
msg db "hello world $"msg2 db "helloo $"
Ejemplo de salida para las cadenas:
msg db "hello world $"msg2 db "hello $"
Ejemplo de salida para las cadenas:
msg db "hello world $"msg2 db "hello world $"
No hay comentarios:
Publicar un comentario