Este programa en ARM64 para Raspberry Pi OS calcula la longitud de una cadena ingresada por el usuario (como lo haría strlen en C), y luego imprime cuántos caracteres contiene la cadena.
🧠 ¿Qué hace este programa?
Muestra un mensaje pidiendo una cadena de texto.
La lee completa (incluso con espacios) hasta que detecta un salto de línea (ENTER).
Recorre la cadena carácter por carácter hasta encontrar el NULL terminator (0x00), y cuenta la longitud.
Imprime la longitud.
🗂️ .data — Segmento de datos
msg_ingreso: .string "Ingrese una cadena: "
msg_resultado: .string "La longitud de la cadena es: %d\n"
buffer: .skip 100
formato_str: .string "%[^\n]"
msg_ingreso: mensaje que aparece al pedir la cadena.
msg_resultado: se usa con printf para mostrar el número de caracteres.
buffer: espacio para almacenar hasta 99 caracteres + 1 terminador null (.skip 100).
formato_str: patrón de scanf para leer toda la línea hasta que se presione ENTER.
Lee una línea completa, incluyendo espacios, hasta que se presione ENTER.
🔢 Calcular longitud
adr x0, buffer
mov x1, #0
x0: apunta al inicio del buffer.
x1: se usa como índice / contador de longitud.
🔁 Bucle para contar caracteres
contar_loop:
ldrb w2, [x0, x1] // Cargar el byte actual
cbz w2, fin_conteo // ¿Es 0? Fin de la cadena
add x1, x1, #1 // Si no, incrementa contador
b contar_loop
Recorre la cadena carácter por carácter (como en C: while (*ptr != '\0')).
Cada carácter no-nulo suma uno al contador.
🖨️ Imprimir resultado
adr x0, msg_resultado
bl printf
Imprime: "La longitud de la cadena es: %d\n"
El registro x1 ya contiene el resultado y se pasa implícitamente a printf como segundo argumento (w1).
🧹 Epílogo y salida
mov w0, #0
ldp x29, x30, [sp], 16
ret
Finaliza el programa limpiamente.
🧪 Ejemplo de uso
$ ./strlen
Ingrese una cadena: hola mundo
La longitud de la cadena es: 10
✅ ¿Qué técnicas usa?
scanf("%[^\n]"): lectura segura de strings con espacios (clave para capturar frases).
ldrb: carga byte por byte, ideal para manipulación de texto ASCII.
Contador manual tipo strlen, sin usar funciones estándar.