/*
Autor: Victor Manuel Madrid Lugo
Fecha: 09/04/2025
Descripción: Elimina todos los espacios en blanco de una cadena ingresada por el usuario
Demostración: [https://asciinema.org/a/ZoOnPdJhhzdxECRisPI017oeU]
Equivalente en Python:
texto = input("Ingrese texto: ")
texto_sin_espacios = texto.replace(' ', '')
print("Texto sin espacios:", texto_sin_espacios)
*/
.section .data
msg_prompt: .asciz "Ingrese una cadena de texto: "
msg_result: .asciz "Texto sin espacios: "
newline: .asciz "\n"
buffer: .skip 256 // Buffer para entrada
resultado: .skip 256 // Buffer para texto sin espacios
.section .text
.global _start
_start:
// Solicitar cadena al usuario
mov x0, #1 // stdout
ldr x1, =msg_prompt
mov x2, #28 // Longitud del mensaje
mov x8, #64 // syscall write
svc #0
// Leer entrada
mov x0, #0 // stdin
ldr x1, =buffer
mov x2, #256 // Tamaño máximo
mov x8, #63 // syscall read
svc #0
// Procesar cadena (eliminar espacios)
mov x19, #0 // Índice origen (buffer original)
mov x20, #0 // Índice destino (buffer resultado)
ldr x21, =buffer // Puntero a la cadena original
ldr x22, =resultado // Puntero al resultado
process_loop:
ldrb w23, [x21, x19] // Cargar carácter actual
cbz w23, print_result // Terminar si es null
cmp w23, #10 // Terminar si es newline
beq print_result
// Verificar si es espacio (ASCII 32)
cmp w23, #' '
b.ne store_char // Si no es espacio, almacenar
add x19, x19, #1 // Si es espacio, saltarlo
b process_loop
store_char:
strb w23, [x22, x20] // Almacenar carácter en resultado
add x19, x19, #1 // Incrementar índices
add x20, x20, #1
b process_loop
print_result:
// Añadir null terminator
mov w23, #0
strb w23, [x22, x20]
// Imprimir mensaje de resultado
mov x0, #1
ldr x1, =msg_result
mov x2, #19 // Longitud del mensaje
mov x8, #64
svc #0
// Imprimir cadena sin espacios
mov x0, #1
ldr x1, =resultado
mov x2, x20 // Longitud de la cadena resultante
mov x8, #64
svc #0
// Imprimir nueva línea
mov x0, #1
ldr x1, =newline
mov x2, #1
mov x8, #64
svc #0
// Salir
mov x0, #0 // Código de retorno
mov x8, #93 // syscall exit
svc #0