.section .data
buffer_int: .skip 8 // para parte entera
buffer_dec: .skip 8 // para parte decimal
dot: .asciz "." // punto decimal
arrow: .asciz " -> " // separador
newline: .asciz "\n" // salto de línea
.section .text
.global _start
_start:
mov x19, #9 // contador desde 9 hasta 25
loop:
// 1. Convertir x19 a texto (entero original)
mov x0, x19
ldr x1, =buffer_int
bl itoa
// 2. Imprimir el número original
mov x0, #1
ldr x1, =buffer_int
bl strlen
mov x2, x0
mov x0, #1
mov x8, #64
svc 0
// 3. Imprimir " -> "
ldr x1, =arrow
bl strlen
mov x2, x0
mov x0, #1
mov x8, #64
svc 0
// 4. Calcular raíz cuadrada
scvtf s0, x19 // convertir entero a float
fsqrt s1, s0 // s1 = sqrt(float)
// 5. Obtener parte entera
fcvtzu w0, s1 // w0 = int(sqrt)
ldr x1, =buffer_int
bl itoa
// 6. Imprimir parte entera de la raíz
mov x0, #1
ldr x1, =buffer_int
bl strlen
mov x2, x0
mov x0, #1
mov x8, #64
svc 0
// 7. Imprimir punto decimal "."
ldr x1, =dot
bl strlen
mov x2, x0
mov x0, #1
mov x8, #64
svc 0
// 8. Obtener primer decimal (parte decimal truncada)
fmov s2, #10.0
fmul s3, s1, s2 // multiplicamos por 10
fcvtzu w0, s3 // convertir float a int
mov x1, #10
udiv x2, x0, x1
msub x0, x2, x1, x0 // x0 = x0 % 10 (solo primer decimal)
add x0, x0, #'0' // convertir a ASCII
ldr x1, =buffer_dec
strb w0, [x1] // guardar carácter decimal
mov w0, #0
strb w0, [x1, #1] // terminar string
// 9. Imprimir decimal
mov x0, #1
ldr x1, =buffer_dec
bl strlen
mov x2, x0
mov x0, #1
mov x8, #64
svc 0
// 10. Imprimir salto de línea
ldr x1, =newline
bl strlen
mov x2, x0
mov x0, #1
mov x8, #64
svc 0
// 11. Siguiente número
add x19, x19, #1
cmp x19, #26
blt loop
// Salida del programa
mov x8, #93
mov x0, #0
svc 0
// ------------ strlen ------------
strlen:
mov x2, x1
.loop:
ldrb w3, [x2], #1
cmp w3, #0
b.ne .loop
sub x0, x2, x1
ret
// ------------ itoa (entero -> string) ------------
itoa:
mov x2, x0
mov x3, x1
add x4, x1, #10
mov x5, #0
strb w5, [x4]
mov x6, x4
.itoa_loop:
mov x5, #10
udiv x0, x2, x5
msub x5, x0, x5, x2
add x5, x5, #'0'
sub x6, x6, #1
strb w5, [x6]
mov x2, x0
cbnz x2, .itoa_loop
.copy_loop:
ldrb w5, [x6], #1
strb w5, [x1], #1
cmp w5, #0
b.ne .copy_loop
ret