Skip to content

Instantly share code, notes, and snippets.

@pepinisillo
Created April 11, 2025 05:59
Show Gist options
  • Save pepinisillo/5f0d22cf5f8e3875dfe72222b981d5d1 to your computer and use it in GitHub Desktop.
Save pepinisillo/5f0d22cf5f8e3875dfe72222b981d5d1 to your computer and use it in GitHub Desktop.
Programa 38 Muestra los numeros impares del 5 al 75 mostrando resultado en terminal 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/10 |
| • Descripción: Programa que muestra los numeros impares del 5 al 75 |
| en Rust y Assembly ARM64 para RaspbianOS. |
| • Demostración: |
| https://asciinema.org/a/714649 |
| • Compilación (Raspberry Pi ARM64): |
| as impares_5al75.s -o impares_5al75.o |
| ld impares_5al75.o -o impares_5al75 |
| • Ejecución: ./impares_5al75 |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
⠂⠄⠄⠂⠁⠁⠂⠄⠄⠂⠁⠁⠂⠄⠄⠂ ⠂⠄⠄⠂☆
═════════•°• Demostración Código en lenguaje Rust •°•═══════
fn main() {
for num in (5..=75).step_by(2) {
println!("{}", num);
}
}
════════════════════•°• ☆ •°•══════════════════════════════
/*
/* ⠂⠄⠄⠂⠁⠁⠂⠄⠄⠂⠁⠁⠂⠄⠄⠂ ⠂⠄⠄⠂☆
═════════════•°• Código en ARM64 Assembly •°•═════════════ */
// Definiciones de constantes
.equ STDOUT, 1
.equ SYS_WRITE, 64
.equ SYS_EXIT, 93
.section .data
buffer: .ascii " " // Buffer para 2 dígitos
newline: .ascii "\n"
.section .text
.global _start
_start:
mov x19, 5 // Comenzamos con el primer número impar (5)
mov x20, 75 // Límite superior (75)
loop:
// Convertir el número a ASCII
mov x0, x19 // Cargar el número a convertir
bl number_to_ascii // Llamar a rutina de conversión
// Escribir el número
mov x0, STDOUT // Descriptor de archivo (stdout)
adr x1, buffer // Dirección del buffer
mov x2, 2 // Longitud (2 dígitos)
mov x8, SYS_WRITE // Número de llamada al sistema (write)
svc 0
// Escribir nueva línea
mov x0, STDOUT
adr x1, newline
mov x2, 1
mov x8, SYS_WRITE
svc 0
// Incrementar de 2 en 2 (siguiente número impar)
add x19, x19, 2
cmp x19, x20 // Comparar con el límite
b.le loop // Si ≤ 75, continuar
exit:
// Salir del programa
mov x0, 0 // Código de salida 0
mov x8, SYS_EXIT
svc 0
// Rutina para convertir número a ASCII de 2 dígitos
number_to_ascii:
mov x1, 10 // Divisor
udiv x2, x0, x1 // Dígito de decenas
msub x3, x2, x1, x0 // Dígito de unidades (x0 % 10)
// Convertir a ASCII
add x2, x2, '0'
add x3, x3, '0'
// Almacenar en buffer
adr x4, buffer
strb w2, [x4] // Decenas
strb w3, [x4, 1] // Unidades
ret
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment