**
Nombre: cuadra.s
Autor: Karla Itzel Vázquez Cruz
Fecha: 10-04-2025
Descripción: Area del Cuadrado
Plataforma: Raspberry Pi OS 64-bit
Asciinema: cuadra.s
Versión en C:
int area_cuadrado(int lado) {
return lado * lado;
}
Versión en ARM64 RaspbianOS Linux:
.section .data
numero: .quad 2 // Número a elevar al cuadrado
buffer: .skip 32 // Buffer para imprimir resultado
.section .text
.global _start
_start:
// Leer número
ldr x0, =numero
ldr x1, [x0] // x1 = n
// Calcular n * n
mul x2, x1, x1 // x2 = n * n
// Convertir a texto
mov x3, x2 // valor a imprimir
ldr x4, =buffer
bl int_to_ascii // devuelve puntero final en x5
// Agregar newline
mov w6, '\n'
strb w6, [x5]
// Escribir resultado
mov x8, 64 // syscall write
mov x0, 1 // stdout
ldr x1, =buffer
sub x2, x5, x1
add x2, x2, 1 // +1 por \n
svc 0
// exit(0)
mov x8, 93
mov x0, 0
svc 0
// --------------------------------------------------------
// Convierte entero en x3 a ASCII y lo escribe en x4 (buffer)
// Devuelve x5 apuntando justo después del número
// --------------------------------------------------------
int_to_ascii:
mov x5, 10 // divisor base
mov x6, x3 // copia del número
mov x7, x4 // inicio buffer
// Contar dígitos
mov x9, 0
mov x10, x6
count_digits:
udiv x10, x10, x5
add x9, x9, 1
cmp x10, 0
b.ne count_digits
mov x10, x6
add x7, x7, x9
mov x5, x7 // x5 = puntero final
convert_loop:
udiv x8, x10, x5
msub x12, x8, x5, x10 // x12 = x10 % 10
add x12, x12, '0'
sub x7, x7, 1
strb w12, [x7]
mov x10, x8
cmp x10, 0
b.ne convert_loop
ret