// ****************************************************************************
// * 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