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

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
SIaAL. - Carga el byte actual de la cadena en
DIaBL.
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 aes_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_shellponiendo 128 bytes a 0.
xor di, di
- Reinicia el índice
DIa 0.
mov bl, 1
ret
- Coloca
1enBLindicando que las cadenas son iguales y retorna.
no_es_igual:
- Etiqueta para cuando las cadenas no son iguales.
mov al, 0
ret
- Coloca
0enAL(aunque no se usaBLaquí, 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
SIla dirección del mensaje de error. - Llama a la función
imprimir_cadenapara mostrar el mensaje.
mov si, buffer_shell
call imprimir_cadena
- Luego carga en
SIla 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_shelldebe estar definido y contener el comando actual.mensaje_errordebe estar definido como un mensaje de texto.- La función
imprimir_cadenadebe estar disponible para imprimir texto.