GNU/Linux xterm-256color bash 130 views

// ****************************************************************************
// * Lenguajes de Interfaz en TECNM Campus ITT
// * Nombre del archivo: practica.s
// * Descripción: Cambia una cadena de texto a minusculas
// * Autor: [America Fernanda Nevarez de la Cruz]
// * Fecha: [2025-04-02]
// * Plataforma: Raspberry Pi OS (64 bits)
// * Demostración:  [https://asciinema.org/a/LCCL6k8KJHGqfTRoWwdCFzCBy]
// ****************************************************************************

// ****************************************************************************
// * Codigo equivalente en C#
// * using System;
// *    class Program
// *    {
// *        static void Main(string[] args)
// *        {
// *            Console.Write("Ingresa una cadena: ");
// *            string input = Console.ReadLine();
// *            string lowercaseInput = input.ToLower();
// *            Console.WriteLine(lowercaseInput);
// *        }
// *     }
// ****************************************************************************

.section .data
prompt:     .asciz "Ingresa una cadena: "
newline:    .asciz "\n"

    .section .bss
input:      .space 100  // Espacio para la cadena (ajusta el tamaño según sea necesario)

    .section .text
    .globl _start

_start:
    // Imprimir el mensaje de solicitud
    mov x0, 1           // File descriptor 1 (stdout)
    ldr x1, =prompt      // Dirección del mensaje
    ldr x2, =prompt_len  // Longitud del mensaje
    ldr w2, [x2]
    mov x8, 64          // syscall número para write
    svc 0               // Llamar a la syscall

    // Leer la cadena ingresada
    mov x0, 0           // File descriptor 0 (stdin)
    ldr x1, =input      // Dirección de la variable input
    mov x2, 100         // Leer hasta 100 bytes (ajusta según sea necesario)
    mov x8, 63          // syscall número para read
    svc 0               // Llamar a la syscall

    // Obtener la longitud de la cadena leída
    mov x10, x0        // X10 contiene la longitud de la cadena leida
    mov x11, 0         // Contador para el bucle
    ldr x12, =input     // Direccion de la cadena input

convert_loop:
    cmp x11, x10       // Compara el contador con la longitud de la cadena
    b.ge end_convert_loop // si es mayor o igual se termina el bucle
    ldrb w1, [x12, x11]  // Cargar el carácter actual
    cmp w1, 'A'        // Comparar con 'A'
    blt not_uppercase  // Si es menor, no es mayúscula
    cmp w1, 'Z'        // Comparar con 'Z'
    bgt not_uppercase  // Si es mayor, no es mayúscula
    add w1, w1, #32    // Convertir a minúscula

not_uppercase:
    strb w1, [x12, x11]  // Almacenar el carácter convertido
    add x11, x11, #1    // Incrementar el contador
    b convert_loop     // Repetir el bucle

end_convert_loop:
    // Imprimir la cadena convertida
    mov x0, 1           // File descriptor 1 (stdout)
    ldr x1, =input      // Dirección de input
    mov x2, x10         // Longitud de la cadena
    mov x8, 64          // syscall número para write
    svc 0               // Llamar a la syscall

    // Imprimir el salto de línea
    mov x0, 1           // File descriptor 1 (stdout)
    ldr x1, =newline    // Dirección del salto de línea
    ldr x2, =newline_len
    ldr w2, [x2]
    mov x8, 64          // syscall número para write
    svc 0               // Llamar a la syscall

    // Terminar el programa
    mov x8, 93          // syscall número para exit
    mov x0, 0           // Código de salida 0
    svc 0               // Realizar syscall

    .section .data
prompt_len: .word 18
newline_len: .word 1
@AmericaNC
Comment