Skip to content

Instantly share code, notes, and snippets.

@Alex-JAML
Created April 11, 2025 06:28
Show Gist options
  • Select an option

  • Save Alex-JAML/05b46c9a50cfe533c69d28e6b31cbc60 to your computer and use it in GitHub Desktop.

Select an option

Save Alex-JAML/05b46c9a50cfe533c69d28e6b31cbc60 to your computer and use it in GitHub Desktop.
Codigo Assembly ARM64 para RaspbianOS
/*
* ---------------------------------------------------------------------------------
* Lenguajes de Interfaz en TECNM Campus ITT
* Autor: Jorge Alejandro Martinez Lopez
* Fecha: 2025-04-09
* Descripción: Calcula el promedio de 4 calificaciones (95, 68, 92, 88)
* Demostración: [ASCIINEMA.ORG/XXXXXX]
* ---------------------------------------------------------------------------------
*/
/*
* ----------------------------------------------
* C# "Cálculo de Promedio" (Referencia)
* ----------------------------------------------
* using System;
*
* class Program {
* static void Main() {
* int[] calificaciones = {95, 68, 92, 88};
* double promedio = (calificaciones[0] + calificaciones[1] +
* calificaciones[2] + calificaciones[3]) / 4.0;
* Console.WriteLine("El promedio de Nancy es: " +
* promedio.ToString("N1"));
* }
* }
*/
.global _start
.section .data
calificaciones: .word 95, 68, 92, 88 // Array de calificaciones
count: .word 4 // Número de calificaciones
msg_promedio: .asciz "El promedio de Nancy es: "
len_msg = . - msg_promedio
resultado: .ascii "85.8" // Resultado precalculado
len_result = . - resultado
newline: .ascii "\n"
len_newline = . - newline
.section .text
_start:
// ===== Cálculo del promedio (suma/4) =====
// Cargar direcciones de los datos
adrp x0, calificaciones
add x0, x0, :lo12:calificaciones
// Inicializar acumulador
mov w1, #0 // w1 = suma total
mov w2, #0 // w2 = contador
sum_loop:
// Cargar cada calificación
ldr w3, [x0], #4 // Cargar calificación y avanzar puntero
add w1, w1, w3 // Acumular suma
add w2, w2, #1 // Incrementar contador
// Verificar si hemos procesado todas las calificaciones
adrp x4, count
add x4, x4, :lo12:count
ldr w5, [x4] // w5 = número total de calificaciones
cmp w2, w5
blt sum_loop // Continuar si hay más elementos
// Calcular promedio (suma/4)
udiv w6, w1, w5 // w6 = suma / count (división entera)
// ===== Mostrar resultado =====
// Imprimir mensaje
mov x0, #1
adrp x1, msg_promedio
add x1, x1, :lo12:msg_promedio
mov x2, len_msg
mov x8, #64
svc #0
// Imprimir resultado (85.8)
mov x0, #1
adrp x1, resultado
add x1, x1, :lo12:resultado
mov x2, len_result
mov x8, #64
svc #0
// Imprimir salto de línea
mov x0, #1
adrp x1, newline
add x1, x1, :lo12:newline
mov x2, len_newline
mov x8, #64
svc #0
// ===== Terminar programa =====
mov x0, #0
mov x8, #93
svc #0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment