GNU/Linux xterm-256color bash 188 views

**
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

More recordings by Itzel

Browse all

AREA DE UN CUADRADO l=2 1:09

by Itzel

MAYUSCULAS A MINISCULAS 1:02

by Itzel

Carita Feliz 1:55

by Itzel

DECIMAL A HEXADECIMAL 1:38

by Itzel