Created
April 11, 2025 05:59
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
______ ____ ____ __ __ | |
/\ _ \/\ _`\ /'\_/`\ /'___\/\ \\ \ | |
\ \ \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