GNU/Linux xterm-256color bash 132 views

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

// ****************************************************************************
// * Version en Javascript
// * const prompt = "Ingresa una cadena en minusculas: ";
// * const newline = "\n";
// * const input = new Array(100).fill(''); // Espacio para la cadena (ajusta el tamaño según sea necesario)

// * function main() {
// *     // Imprimir el mensaje de solicitud
// *     process.stdout.write(prompt);
// * 
// *     // Leer la cadena ingresada
// *     const stdin = process.stdin;
// *     stdin.setEncoding('utf8');
// *     stdin.on('data', (data) => {
// *         const inputString = data.trim();
// *         const convertedString = convertToUppercase(inputString);
// *         
// *         // Imprimir la cadena convertida
// *         process.stdout.write(convertedString);
// *         
// *         // Imprimir el salto de línea
// *         process.stdout.write(newline);
// *         
// *         // Terminar el programa
// *         process.exit(0);
// *     });
// * }

// * function convertToUppercase(str) {
// *     let result = '';
// *     for (let i = 0; i < str.length; i++) {
// *         const char = str[i];
// *         if (char >= 'a' && char <= 'z') {
// *             result += String.fromCharCode(char.charCodeAt(0) - 32); // Convertir a mayúscula
// *         } else {
// *             result += char; // Mantener el carácter original
// *         }
// *     }
// *     return result;
// * }

// * main();

.section .data
prompt:     .asciz "Ingresa una cadena en minusculas: "
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_lowercase  // Si es menor, no es minúscula
    cmp w1, 'z'        // Comparar con 'z'
    bgt not_lowercase  // Si es mayor, no es minúscula
    sub w1, w1, #32    // Convertir a mayúscula

not_lowercase:
    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 32
newline_len: .word 1
@AmericaNC
Comment