**
Nombre: Sum3.s
Autor: Karla Itzel Vázquez Cruz
Fecha: 10-04-2025
Descripción: Suma de 3 numeros de un solo digito.
Plataforma: Raspberry Pi OS 64-bit
Asciinema: Sum3.s
Versión en C:
int suma_tres_numeros(int a, int b, int c) {
return a + b + c;
}
Versión en ARM64 RaspbianOS Linux:
.section .data
msg1: .ascii "Ingresa el primer número: "
len1 = . - msg1
msg2: .ascii "Ingresa el segundo número: "
len2 = . - msg2
msg3: .ascii "Ingresa el tercer número: "
len3 = . - msg3
msg_result: .ascii "La suma es: "
len_result = . - msg_result
newline: .ascii "\n"
.section .bss
buffer: .skip 64
num_buffer: .skip 16
.section .text
.global _start
_start:
// ---------- Primer número ----------
ldr x0, =msg1
mov x1, #len1
bl print_msg
bl leer_numero
mov x3, x0 // x3 = primer número
// ---------- Segundo número ----------
ldr x0, =msg2
mov x1, #len2
bl print_msg
bl leer_numero
mov x4, x0 // x4 = segundo número
// ---------- Tercer número ----------
ldr x0, =msg3
mov x1, #len3
bl print_msg
bl leer_numero
mov x5, x0 // x5 = tercer número
// ---------- Suma ----------
add x6, x3, x4
add x6, x6, x5
// ---------- Mostrar resultado ----------
ldr x0, =msg_result
mov x1, #len_result
bl print_msg
mov x0, x6
bl print_int
// ---------- Salir ----------
mov x8, #93
mov x0, #0
svc #0
// ---------------- FUNCIONES ---------------------
leer_numero:
mov x0, #0 // STDIN
ldr x1, =buffer
mov x2, #64
mov x8, #63 // syscall read
svc #0
// Convertir string a entero
ldr x1, =buffer
mov x0, #0 // resultado
next_digit:
ldrb w2, [x1], #1
cmp w2, #10 // salto de línea = fin
beq done_input
sub w2, w2, #'0' // convierte ASCII a dígito
mul x0, x0, x7 // ✅ corregido
add x0, x0, x2
b next_digit
done_input:
ret
print_msg:
mov x2, x1
mov x1, x0
mov x0, #1
mov x8, #64
svc #0
ret
print_int:
ldr x1, =num_buffer
add x1, x1, #15
mov x2, #10
mov x3, x0
mov x4, x1
convert:
udiv x5, x3, x2
msub x6, x5, x2, x3
add x6, x6, #'0'
sub x1, x1, #1
strb w6, [x1]
mov x3, x5
cbz x3, mostrar
b convert
mostrar:
sub x2, x4, x1
mov x0, #1
mov x8, #64
mov x1, x1
svc #0
// Salto de línea
ldr x1, =newline
mov x2, #1
mov x8, #64
svc #0
ret