Created
April 11, 2025 05:45
-
-
Save pepinisillo/30c22e22e18ab5446642cfcad8103f03 to your computer and use it in GitHub Desktop.
Programa 37 Muestra los numeros pares del 1 al 50 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 pares del 1 al 50 | | |
| | en Rust y Assembly ARM64 para RaspbianOS. | | |
| | • Demostración: | | |
| | https://asciinema.org/a/714632 | | |
| | • Compilación (Raspberry Pi ARM64): | | |
| | as pares_1al50.s -o pares_1al50.o | | |
| | ld pares_1al50.o -o pares_1al50 | | |
| | • Ejecución: ./pares_1al50 | | |
|  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | |
| ⠂⠄⠄⠂⠁⠁⠂⠄⠄⠂⠁⠁⠂⠄⠄⠂ ⠂⠄⠄⠂☆ | |
| ═════════•°• Demostración Código en lenguaje Rust •°•═══════ | |
| fn main() { | |
| for num in (2..=50).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 almacenar los dígitos (2 bytes) | |
| newline: .ascii "\n" | |
| .section .text | |
| .global _start | |
| _start: | |
| mov x19, 1 // Comenzamos con el número 1 | |
| mov x20, 50 // Límite superior (50) | |
| loop: | |
| // Verificar si el número es par | |
| tst x19, #1 // Testear el bit menos significativo | |
| b.ne next // Si no es cero (impar), saltar a 'next' | |
| // Si es par, imprimirlo | |
| mov x0, x19 // Cargar el número a convertir | |
| bl number_to_ascii // Llamar a la 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 // Llamar al sistema | |
| // Escribir nueva línea | |
| mov x0, STDOUT | |
| adr x1, newline | |
| mov x2, 1 | |
| mov x8, SYS_WRITE | |
| svc 0 | |
| next: | |
| add x19, x19, 1 // Incrementar en 1 para el siguiente número | |
| cmp x19, x20 // Comparar con el límite | |
| b.le loop // Si es menor o igual, repetir el bucle | |
| exit: | |
| // Salir del programa | |
| mov x0, 0 // Código de salida 0 | |
| mov x8, SYS_EXIT // Número de llamada al sistema (exit) | |
| svc 0 | |
| // Rutina para convertir un número a su representación ASCII de 2 dígitos | |
| // Entrada: x0 = número a convertir (0-99) | |
| // Salida: buffer actualizado con los dígitos ASCII | |
| number_to_ascii: | |
| mov x1, 10 // Divisor | |
| udiv x2, x0, x1 // x2 = x0 / 10 (dígito de las decenas) | |
| msub x3, x2, x1, x0 // x3 = x0 % 10 (dígito de las unidades) | |
| // Convertir dígitos a ASCII | |
| add x2, x2, '0' // Convertir decenas a ASCII | |
| add x3, x3, '0' // Convertir unidades a ASCII | |
| // Almacenar en buffer | |
| adr x4, buffer // Dirección del buffer | |
| strb w2, [x4] // Almacenar decenas | |
| strb w3, [x4, 1] // Almacenar unidades | |
| ret // Retornar |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment