** Nombre: minumay.s Autor: Karla Itzel Vázquez Cruz Fecha: 10-04-2025 Descripción: Transforma una cadena en minusculas a una cadena en mayusculas. Plataforma: Raspberry Pi OS 64-bit Asciinema:minumay.s
Versión en C:
void convertir_a_mayusculas(char *cadena) {
for (int i = 0; cadena[i]; i++) {
cadena[i] = toupper(cadena[i]);
}
}
Versión en ARM64 RaspbianOS Linux:
.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