GNU/Linux xterm-256color bash 139 views

// ****************************************************************************
// * Lenguajes de Interfaz en TECNM Campus ITT
// * Nombre del archivo: practica.s
// * Descripción: Programa que en mayusculas las iniciales de cada palabra
// * Autor: [America Fernanda Nevarez de la Cruz]
// * Fecha: [2025-04-08]
// * Plataforma: Raspberry Pi OS (64 bits)
// * Demostración:  [https://asciinema.org/a/aCRhZfwYrrvuU6uogCmrKpa3z]
// ****************************************************************************

// ****************************************************************************
// * Codigo equivalente en Java
// *import java.util.Scanner;
// *
// *public class CapitalizarIniciales {
// *    // * Función para capitalizar las iniciales de cada palabra
// *    public static String capitalizarIniciales(String texto) {
// *        // * Dividir el texto en palabras usando espacios
// *        String[] palabras = texto.split(" ");
// *        // * StringBuilder para construir el resultado
// *        StringBuilder resultado = new StringBuilder();
// *        
// *        // * Recorrer cada palabra del arreglo
// *        for (String palabra : palabras) {
// *            // * Si la palabra no está vacía (por si hay múltiples espacios)
// *            if (!palabra.isEmpty()) {
// *                // * Capitalizar primera letra y añadir el resto de la palabra
// *                resultado.append(Character.toUpperCase(palabra.charAt(0)))
// *                       .append(palabra.substring(1).toLowerCase())
// *                       .append(" "); // Añadir espacio después de cada palabra
// *            }
// *        }
// *        // * Eliminar el espacio extra al final y devolver el resultado
// *        return resultado.toString().trim();
// *    }
// *
// *    // * Función principal
// *    public static void main(String[] args) {
// *        // * Crear objeto Scanner para leer entrada del usuario
// *        Scanner scanner = new Scanner(System.in);
// *        
// *        // * Pedir al usuario que ingrese un texto
// *        System.out.println("Ingrese un texto:");
// *        String texto = scanner.nextLine();
// *        
// *        // * Procesar el texto y mostrar el resultado
// *        System.out.println("Texto con iniciales capitalizadas:");
// *        System.out.println(capitalizarIniciales(texto));
// *        
// *        // * Cerrar el scanner
// *        scanner.close();
// *    }
// *}
// ****************************************************************************
.section .data
prompt:     .asciz "Ingresa una cadena: "
prompt_len: .word 20
newline:    .asciz "\n"
newline_len: .word 1

.section .bss
input:      .space 100

.section .text
.global _start

_start:
    // Imprimir el mensaje de solicitud
    mov x0, 1
    ldr x1, =prompt
    ldr x2, =prompt_len
    ldr w2, [x2]
    mov x8, 64
    svc 0

    // Leer la cadena ingresada
    mov x0, 0
    ldr x1, =input
    mov x2, 100
    mov x8, 63
    svc 0

    // Procesar la cadena
    mov x10, x0        // Longitud de la cadena leída
    mov x11, 0         // Índice
    ldr x12, =input
    mov w13, #' '      // Espacio (usado para detectar palabras)

    mov w14, #' '      // Inicialmente consideramos que antes hubo un espacio

process_loop:
    cmp x11, x10
    b.ge done

    ldrb w1, [x12, x11]

    // Verificar si es letra minúscula
    cmp w14, #' '            // Si antes hubo un espacio, buscar convertir
    b.ne skip_convert

    cmp w1, #'a'
    blt skip_convert
    cmp w1, #'z'
    b.gt skip_convert

    // Convertir a mayúscula (restar 32)
    sub w1, w1, #32
    strb w1, [x12, x11]
    b next_char

skip_convert:
    strb w1, [x12, x11]

next_char:
    mov w14, w1         // Guardamos el carácter actual para próxima comparación
    add x11, x11, #1
    b process_loop

done:
    // Imprimir la cadena modificada
    mov x0, 1
    ldr x1, =input
    mov x2, x10
    mov x8, 64
    svc 0

    // Imprimir salto de línea
    mov x0, 1
    ldr x1, =newline
    ldr x2, =newline_len
    ldr w2, [x2]
    mov x8, 64
    svc 0

    // Salir
    mov x8, 93
    mov x0, 0
    svc 0