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
SI
aAL
. - Carga el byte actual de la cadena en
DI
aBL
.
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_shell
poniendo 128 bytes a 0.
xor di, di
- Reinicia el índice
DI
a 0.
mov bl, 1
ret
- Coloca
1
enBL
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
enAL
(aunque no se usaBL
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.