GNU/Linux xterm bash 90 views

📌 Demostración: Convertidor de una cadena a su versión en mayúsculas en ARM64 Assembly

💻 Lenguajes de Interfaz en TECNM Campus ITT
👨‍💻 Autor: Alejandro Suarez Sandoval
📅 Fecha: 2025/04/02

🎯 Descripción

Este programa convierte una cadena predeterminada en el código a su versión en mayúsculas y lo muestra en la terminal.
La implementación se realiza en:

Assembly ARM64 para RaspbianOS en Raspberry Pi

🔧 Compilación en Raspberry Pi (ARM64)

as mayusculas.s -o mayusculas.o  
ld mayusculas.o -o mayusculas 

▶️ Ejecución

./mayusculas

👀 Código fuente

🔗 Código fuente en Gist: Programa 3 Convertidor de una cadena a su versión en mayúsculas 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/02                                              | 
| • Descripción: Programa que convierte una cadena                 |
|   en mayúsculas en C# y Assembly ARM64 para RaspbianOS.          | 
| • Demostración:                                                  |
|   https://asciinema.org/a/711580                                 |
| • Compilación (Raspberry Pi ARM64):                              |  
|     as mayusculas.s -o mayusculas.o                              |  
|     ld mayusculas.o -o mayusculas                                |  
| • Ejecución: ./mayusculas                                        |  
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄                                        

⠂⠄⠄⠂⠁⠁⠂⠄⠄⠂⠁⠁⠂⠄⠄⠂ ⠂⠄⠄⠂☆
═════════•°• Demostración Código en lenguaje C# •°•═════════

using System;

class Program
{
    static void Main()
    {
        // Cadena ya en memoria
        string cadena = "The boyz es el mejor grupo de kpop";
        
        // Convertir la cadena a mayúsculas
        cadena = cadena.ToUpper();
        
        // Imprimir el resultado
        Console.WriteLine(cadena);
    }
}
 
════════════════════•°• ☆ •°•══════════════════════════════
/*

/* ⠂⠄⠄⠂⠁⠁⠂⠄⠄⠂⠁⠁⠂⠄⠄⠂ ⠂⠄⠄⠂☆
═════════════•°• Código en ARM64 Assembly •°•═════════════ */

// x0-x2: Parámetros para las llamadas al sistema de Linux
// x3: Dirección de la cadena de salida
// x4: Dirección de la cadena de entrada
// w5: Carácter actual que se está procesando
// x8: Número de la función de llamada al sistema de Linux

.text

.global _start

_start:
    ldr x3, =outstr  // Dirección de la cadena de salida
    ldr x4, =instr   // Dirección de la cadena de entrada
loop:
    ldrb w5, [x4], #1
    // Si w5 es el carácter nulo, hemos llegado al final de la cadena
    cmp w5, #0
    b.eq exit_loop
    // Si w5 < 'a', entonces no es un carácter en minúscula
    cmp w5, #'a'
    b.lt store_character
    // Si w5 > 'z', entonces no es un carácter en minúscula
    cmp w5, #'z'
    b.gt store_character
    // El carácter es una letra en minúscula
    add w5, w5, #('A' - 'a')  // Convertir el carácter a mayúscula
store_character:
    strb w5, [x3], #1
    b loop
exit_loop:
    // Imprimir la cadena en mayúsculas
    movz x0, #1  // stdout
    ldr x1, =outstr  // Apuntador al inicio de la cadena
    sub x2, x3, x1  // Longitud de la cadena: fin - inicio
    movz x8, #64
    svc 0

    // Salir del programa
    movz x0, #0  // Código de salida exitoso
    movz x8, #93  // Llamada al sistema para salir de Linux
    svc 0


.data
// Cadena de ejemplo
instr: .asciz "The boyz es el mejor grupo de kpop\n"
outstr: .space 255