GNU/Linux xterm-256color bash 156 views

/*
Autor: Victor Manuel Madrid Lugo
Fecha: 08/04/2025
Descripción: Detecta si una cadena contiene solo dígitos numéricos
Demostración: [https://asciinema.org/a/XLOlNaErhgdSTkgsuLpqWskXT]

Equivalente en Python:
texto = input("Ingrese cadena: ")
print("Contiene solo números" if texto.isdigit() else "No contiene solo números")
*/

.section .data
    msg_prompt:    .asciz "Ingrese una cadena: "
    msg_si:        .asciz "Contiene solo números\n"
    msg_no:        .asciz "No contiene solo números\n"
    buffer:        .skip 256

.section .text
.global _start

_start:
    // Solicitar cadena
    mov x0, #1
    ldr x1, =msg_prompt
    mov x2, #19          // Longitud de msg_prompt
    mov x8, #64          // syscall write
    svc #0

    // Leer entrada
    mov x0, #0
    ldr x1, =buffer
    mov x2, #256
    mov x8, #63          // syscall read
    svc #0

    // Verificar cadena
    mov x19, #0          // Índice
    ldr x20, =buffer
    mov x21, #1          // Flag (1 = solo números)

check_loop:
    ldrb w22, [x20, x19] // Cargar carácter
    cbz w22, check_end   // Fin si null
    cmp w22, #10         // Fin si newline
    beq check_end

    // Verificar si es dígito (0-9)
    cmp w22, #'0'
    b.lt not_digit
    cmp w22, #'9'
    b.gt not_digit

    add x19, x19, #1     // Siguiente carácter
    b check_loop

not_digit:
    mov x21, #0          // Marcar como no válido

check_end:
    // Imprimir resultado
    mov x0, #1
    cbz x21, print_no
    ldr x1, =msg_si
    mov x2, #22          // Longitud msg_si
    b print_result

print_no:
    ldr x1, =msg_no
    mov x2, #25          // Longitud msg_no

print_result:
    mov x8, #64
    svc #0

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