**
Nombre: capi.s
Autor: Karla Itzel Vázquez Cruz
Fecha: 10-04-2025
Descripción: Mayuscula al inicio de cada cadena.
Plataforma: Raspberry Pi OS 64-bit
Asciinema: capi.s
Versión en C:
void mayuscula_inicio_cadena(char *cadena) {
int i = 0;
while (cadena[i]) {
if (i == 0 || cadena[i - 1] == ' ') {
cadena[i] = toupper(cadena[i]);
} else {
cadena[i] = tolower(cadena[i]);
}
i++;
}
}
Versión en ARM64 RaspbianOS Linux:
.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