GNU/Linux xterm bash 88 views

📌 Demostración: Mostrar los números del 1 al 10 en ARM64 Assembly

💻 Lenguajes de Interfaz en TECNM Campus ITT
👨‍💻 Autor: Alejandro Suarez Sandoval
📅 Fecha: 2025/04/08

🎯 Descripción

Este programa muestra en la terminal los números del 1 al 10.
La implementación se realiza en:

Assembly ARM64 para RaspbianOS en Raspberry Pi

🔧 Compilación en Raspberry Pi (ARM64)

as mostrar_10.s -o mostrar_10.o  
ld mostrar_10.o -o mostrar_10 

▶️ Ejecución

./mostrar_10

👀 Código fuente

🔗 Código fuente en Gist: Programa 11 Muestra los números del 1 al 10 Código Assembly ARM64 para RaspbianOS

/*
 ______  ____               ____  __ __      
/\  _  \/\  _`\   /'\_/`\  /'___\/\ \\ \     
\ \ \L\ \ \ \L\ \/\      \/\ \__/\ \ \\ \    
 \ \  __ \ \ ,  /\ \ \__\ \ \  _``\ \ \\ \_  
  \ \ \/\ \ \ \\ \\ \ \_/\ \ \ \L\ \ \__ ,__\
   \ \_\ \_\ \_\ \_\ \_\\ \_\ \____/\/_/\_\_/
    \/_/\/_/\/_/\/ /\/_/ \/_/\/___/    \/_/  
                                             
♡ ∩_∩ 
(„• ֊ •„)♡
| ̄U U ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| 
| • Lenguajes de Interfaz en TECNM Campus ITT                      |   
| • Autor: Alejandro Suarez Sandoval                               | 
| • Fecha: 2025/04/08                                              | 
| • Descripción: Programa que muestra los numeros                  | 
|   del 1 al 10 en Rust y Assembly ARM64 para RaspbianOS.          | 
| • Demostración:                                                  |
|   https://asciinema.org/a/713320                                 |
| • Compilación (Raspberry Pi ARM64):                              |  
|     as mostrar_10.s -o mostrar_10.o                              |  
|     ld mostrar_10.o -o mostrar_10                               |  
| • Ejecución: ./mostrar_10                                        |  
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄                                        

⠂⠄⠄⠂⠁⠁⠂⠄⠄⠂⠁⠁⠂⠄⠄⠂ ⠂⠄⠄⠂☆
═════════•°• Demostración Código en lenguaje Rust •°•═══════

fn main() {
    for i in 1..=10 {
        print!("{} ", i);
    }
    println!();
}
 
════════════════════•°• ☆ •°•══════════════════════════════
/*

/* ⠂⠄⠄⠂⠁⠁⠂⠄⠄⠂⠁⠁⠂⠄⠄⠂ ⠂⠄⠄⠂☆
═════════════•°• Código en ARM64 Assembly •°•═════════════ */

.global _start
.align 2

_start:
    mov x19, 1          // Contador inicia en 1
    mov x20, 10         // Límite es 10

print_loop:
    // Determinar si el número tiene 1 o 2 dígitos
    cmp x19, 10
    b.eq print_two_digits  // Si es 10, imprimir dos dígitos

    // Imprimir número de 1 dígito (1-9)
    add x0, x19, '0'    // Convertir a ASCII
    strb w0, [sp, -16]! // Guardar en stack
    bl print_char
    add sp, sp, 16      // Restaurar stack
    b print_space

print_two_digits:
    // Imprimir '1' para el 10
    mov x0, '1'
    strb w0, [sp, -16]!
    bl print_char
    add sp, sp, 16

    // Imprimir '0' para el 10
    mov x0, '0'
    strb w0, [sp, -16]!
    bl print_char
    add sp, sp, 16

print_space:
    // Imprimir espacio
    mov x0, ' '
    strb w0, [sp, -16]!
    bl print_char
    add sp, sp, 16

    // Incrementar contador y verificar si continuar
    add x19, x19, 1
    cmp x19, x20
    b.le print_loop

    // Imprimir nueva línea al final
    mov x0, '\n'
    strb w0, [sp, -16]!
    bl print_char
    add sp, sp, 16

    // Salir del programa
    mov x0, 0           // Código de retorno
    mov x8, 93          // Syscall exit
    svc 0

// Subrutina para imprimir un carácter
// Espera el carácter en la parte baja de x0
print_char:
    mov x1, sp          // Puntero al carácter
    mov x0, 1           // stdout
    mov x2, 1           // Longitud 1 byte
    mov x8, 64          // Syscall write
    svc 0
    ret