Skip to main content

Comparar cadena

Este es el código de las funciones comparar_cadena y sus subrutinas en DariOS.

compararcadena

Explicación de la función comparar_cadena

La función comparar_cadena compara dos cadenas byte a byte, verificando si son idénticas. Retorna en el registro BL un valor 1 si son iguales, y 0 si no.


Propósito

Comprobar si las cadenas apuntadas por SI y DI son iguales. Si son iguales, limpia el buffer de comandos y retorna BL=1. Si no, retorna BL=0.


Lógica paso a paso

comparar_cadena:
  • Etiqueta que marca el inicio de la función.
mov al, [si]
mov bl, [di]
  • Carga el byte actual de la cadena en SI a AL.
  • Carga el byte actual de la cadena en DI a BL.
cmp al, bl
jne no_es_igual
  • Compara los bytes actuales.
  • Si son distintos, salta a no_es_igual.
cmp al, 0
je es_igual
  • Si el byte actual es 0 (fin de cadena) y son iguales, salta a es_igual.
inc si
inc di
jmp comparar_cadena
  • Avanza a los siguientes bytes y repite la comparación.

es_igual:
  • Etiqueta para cuando las cadenas son iguales.
mov di, buffer_shell
mov cx, 128
mov al, 0
rep stosb
  • Limpia el buffer buffer_shell poniendo 128 bytes a 0.
xor di, di
  • Reinicia el índice DI a 0.
mov bl, 1
ret
  • Coloca 1 en BL indicando que las cadenas son iguales y retorna.

no_es_igual:
  • Etiqueta para cuando las cadenas no son iguales.
mov al, 0
ret
  • Coloca 0 en AL (aunque no se usa BL aquí, se asume 0 significa no igualdad) y retorna.

Explicación de la función error_comando

La función error_comando muestra un mensaje de error junto con el comando ingresado por el usuario, para indicar que no fue reconocido.


Propósito

Informar al usuario que el comando introducido no es válido.


Lógica paso a paso

error_comando:
  • Etiqueta que marca el inicio de la función.
mov si, mensaje_error
call imprimir_cadena
  • Carga en SI la dirección del mensaje de error.
  • Llama a la función imprimir_cadena para mostrar el mensaje.
mov si, buffer_shell
call imprimir_cadena
  • Luego carga en SI la cadena del comando que el usuario escribió.
  • La muestra en pantalla para que el usuario vea qué comando causó el error.
ret
  • Termina la función y retorna.

Requisitos

  • buffer_shell debe estar definido y contener el comando actual.
  • mensaje_error debe estar definido como un mensaje de texto.
  • La función imprimir_cadena debe estar disponible para imprimir texto.