.global _start
.section .data
primos: .quad 2, 3, 5, 7, 11, 13, 17, 19, 23, 29
.section .bss
buffer: .skip 32 // buffer para imprimir el resultado
.section .text
_start:
mov x0, #1 // x0 = producto = 1
ldr x1, =primos // x1 = dirección del arreglo
mov x2, #0 // índice
loop:
cmp x2, #10
beq fin_calculo
ldr x3, [x1, x2, lsl #3] // x3 = primos[x2], escala por 8 bytes
mul x0, x0, x3 // producto *= primo
add x2, x2, #1
b loop
fin_calculo:
// x0 contiene el producto, vamos a imprimirlo
mov x7, x0 // guardar valor a imprimir en x7
bl imprimir_numero
// salir
mov x0, #0
mov x8, #93
svc 0
// ------------------------------
// imprimir_numero (x7)
// Convierte x7 a cadena decimal y la imprime usando syscall write
// ------------------------------
imprimir_numero:
ldr x5, =buffer
add x5, x5, #31 // apuntar al final del buffer
mov x2, #0 // longitud
mov x10, x7 // copia del número
mov x9, #10
print_loop:
udiv x7, x10, x9
mul x8, x7, x9
sub x4, x10, x8 // x4 = dígito
add x4, x4, #'0'
strb w4, [x5]
sub x5, x5, #1
add x2, x2, #1
mov x10, x7
cmp x10, #0
bne print_loop
add x5, x5, #1
mov w3, #'\n'
strb w3, [x5, x2]
add x2, x2, #1
// syscall write(fd=1, buf, len)
mov x0, #1
mov x1, x5
mov x8, #64
svc 0
ret