/*
______ ____ ____ __ __
/\ _ \/\ _`\ /'\_/`\ /'___\/\ \\ \
\ \ \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