-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path24
47 lines (38 loc) · 1.94 KB
/
24
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
--24
.arch armv8-a // Especifica la arquitectura ARMv8-A
.data
msg_ingreso: .string "Ingrese una cadena: "
msg_resultado: .string "La longitud de la cadena es: %d\n"
buffer: .skip 100 // Buffer para almacenar la cadena ingresada
formato_str: .string "%[^\n]" // Formato para leer hasta newline
.text
.global main
.align 2
main:
// Prólogo
stp x29, x30, [sp, -16]! // Guardar registros de enlace y base
mov x29, sp // Establecer nuevo marco de pila
// Mostrar mensaje de ingreso
adr x0, msg_ingreso // Cargar dirección de mensaje de ingreso
bl printf // Llamada a printf para mostrar el mensaje
// Leer cadena
adr x0, formato_str // Formato para leer la cadena
adr x1, buffer // Dirección del buffer donde se almacena la cadena
bl scanf // Llamada a scanf para leer la cadena
// Calcular longitud de la cadena
adr x0, buffer // Dirección del buffer con la cadena leída
mov x1, #0 // Inicializar contador de longitud en 0
contar_loop:
ldrb w2, [x0, x1] // Cargar carácter en w2
cbz w2, fin_conteo // Si es 0 (fin de cadena), salir del bucle
add x1, x1, #1 // Incrementar contador de longitud
b contar_loop // Repetir bucle
fin_conteo:
// Mostrar resultado de longitud
adr x0, msg_resultado // Cargar dirección del mensaje de resultado
mov w1, w1 // Mover longitud a w1 para printf
bl printf // Llamada a printf para mostrar la longitud
// Epílogo y retorno
mov w0, #0 // Retornar 0
ldp x29, x30, [sp], 16 // Restaurar registros de enlace y base
ret