GNU/Linux xterm bash 88 views

📌 Demostración: Convierte una cadena a su versión en minúsculas en ARM64 Assembly

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

🎯 Descripción

Este programa muestra la versión en minúsculas de una cadena guardada en memoria.
La implementación se realiza en:

Assembly ARM64 para RaspbianOS en Raspberry Pi

🔧 Compilación en Raspberry Pi (ARM64)

as minusculas.s -o minusculas.o  
ld minusculas.o -o minusculas 

▶️ Ejecución

./minusculas

👀 Código fuente

🔗 Código fuente en Gist: Programa 13 Convierte una cadena a su version en minusculas 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/08                                                    | 
| • Descripción: Programa que convierte una cadena a                     | 
|   su version en minusculas en C# y Assembly ARM64 para RaspbianOS.     | 
| • Demostración:                                                        |
|   https://asciinema.org/a/713340                                       |
| • Compilación (Raspberry Pi ARM64):                                    |  
|     as minusculas.s -o minusculas.o                                    |  
|     ld minusculas.o -o minusculas                                      |  
| • Ejecución: ./minusculas                                              |  
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄                                        

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

using System;

class Program
{
    static void Main()
    {
        string instr = "THE BOYZ es el mejor grupo de KPOP\n";
        
        char[] outstr = new char[255];
        
        for (int i = 0; i < instr.Length; i++)
        {
            char currentChar = instr[i];
            
            if (currentChar >= 'A' && currentChar <= 'Z')
            {
                currentChar = (char)(currentChar + ('a' - 'A'));
            }
            
            outstr[i] = currentChar;
        }
        
        string result = new string(outstr, 0, instr.Length);
        Console.Write(result);
        
        Environment.Exit(0);
    }
}

════════════════════•°• ☆ •°•══════════════════════════════
/*

/* ⠂⠄⠄⠂⠁⠁⠂⠄⠄⠂⠁⠁⠂⠄⠄⠂ ⠂⠄⠄⠂☆
═════════════•°• 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 mayúscula
    cmp w5, #'A'
    b.lt store_character
    // Si w5 > 'Z', entonces no es un carácter en mayúscula
    cmp w5, #'Z'
    b.gt store_character
    // El carácter es una letra en mayúscula
    add w5, w5, #('a' - 'A')  // Convertir el carácter a minúscula
    
store_character:
    strb w5, [x3], #1
    b loop
    
exit_loop:
    // Imprimir la cadena en minú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     // sys_write
    svc 0

    // Salir del programa
    movz x0, #0      // Código de salida exitoso
    movz x8, #93     // sys_exit
    svc 0

.data
// Cadena de ejemplo
instr: .asciz "THE BOYZ es el mejor grupo de KPOP\n"
outstr: .space 255