📌 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