** Nombre: n.s Autor: Karla Itzel Vázquez Cruz Fecha: 07-04-2025 Descripción: Pide al usuario una palabra y cuántas veces repetirla Asciinema:https://asciinema.org/a/712745 **
Código en ARM64 RaspbianOS Linux:
.section .bss
buffer_palabra: .skip 64 // Buffer para la palabra del usuario
buffer_repeticiones: .skip 16 // Buffer para cantidad de repeticiones
.section .data
mensaje_palabra: .asciz "Palabra a Repetir (máx 64): "
mensaje_veces: .asciz "¿Cuántas veces quieres repetirla?: "
salto: .asciz "\n"
.section .text
.global _start
_start:
// Mostrar mensaje de palabra
mov x0, #1
ldr x1, =mensaje_palabra
mov x2, #36
mov x8, #64
svc #0
// Leer palabra
mov x0, #0
ldr x1, =buffer_palabra
mov x2, #64
mov x8, #63
svc #0
// Mostrar mensaje de repeticiones
mov x0, #1
ldr x1, =mensaje_veces
mov x2, #36
mov x8, #64
svc #0
// Leer repeticiones
mov x0, #0
ldr x1, =buffer_repeticiones
mov x2, #16
mov x8, #63
svc #0
// Convertir buffer_repeticiones a número
ldr x0, =buffer_repeticiones
bl string_to_int
mov x3, x0 // x3 = repeticiones
repetir_loop:
cmp x3, #0
beq salir
// Imprimir la palabra
mov x0, #1
ldr x1, =buffer_palabra
mov x2, #64 // imprimimos hasta 64, aunque venga un salto después
mov x8, #64
svc #0
sub x3, x3, #1
b repetir_loop
salir:
// Salir del programa
mov x0, #0
mov x8, #93
svc #0
// Función: string_to_int
// Entrada: x0 = dirección de cadena ASCII con número
// Salida: x0 = valor numérico
string_to_int:
mov x1, #0 // resultado acumulado
mov x2, #10 // base 10
loop_s2i:
ldrb w3, [x0], #1 // leer siguiente carácter
cmp w3, #10 // ¿Es salto de línea?
beq fin_s2i
cmp w3, #0
beq fin_s2i
sub w3, w3, #48 // convertir ASCII a dígito
mul x1, x1, x2
add x1, x1, x3
b loop_s2i
fin_s2i:
mov x0, x1
ret