GNU/Linux xterm-256color bash 144 views

// ****************************************************************************
// * Lenguajes de Interfaz en TECNM Campus ITT
// * Nombre del archivo: practica.s
// * Descripción: Juego de adivinar el numero (0-10) 
// * Autor: [America Fernanda Nevarez de la Cruz]
// * Fecha: [2025-04-08]
// * Plataforma: Raspberry Pi OS (64 bits)
// * Demostración:  [https://asciinema.org/a/EjXFGSMvhKqHURsUlJhkBCzIf]
// ****************************************************************************

// ****************************************************************************
// * Codigo equivalente en Javascript
// *const readline = require('readline').createInterface({
// *    input: process.stdin,
// *    output: process.stdout
// *});
// *
// *// Número secreto (puedes cambiarlo)
// *const numeroSecreto = 7;
// *
// *function adivinaNumero() {
// *    // Mostrar mensaje inicial
// *    readline.question("Adivina el numero (0-10): ", (input) => {
// *        // Convertir entrada a número
// *        const numeroIngresado = parseInt(input);
// *
// *        // Verificar si es correcto
// *        if (numeroIngresado === numeroSecreto) {
// *            console.log("¡Felicidades!");
// *            readline.close();
// *        } else {
// *            console.log("Incorrecto. Intenta otra vez.");
// *            // Volver a intentar
// *            adivinaNumero();
// *        }
// *    });
// *}
// *
// *// Iniciar el juego
// *adivinaNumero();
// ****************************************************************************

.section .bss
buffer: .skip 64

.section .data
msg_inicio: .ascii "Adivina el numero (0-10): "
len_inicio = . - msg_inicio

msg_correcto: .ascii "¡Felicidades!\n"
len_correcto = . - msg_correcto

msg_incorrecto: .ascii "Incorrecto. Intenta otra vez.\n"
len_incorrecto = . - msg_incorrecto

.section .text
.global _start

_start:
    // Número "secreto" (puedes cambiarlo)
    mov x10, #7  // número a adivinar

intento:
    // Mostrar mensaje
    ldr x0, =msg_inicio
    mov x1, #len_inicio
    bl print_msg

    // Leer entrada del usuario
    mov x0, #0
    ldr x1, =buffer
    mov x2, #64
    mov x8, #63
    svc #0

    // Convertir string a número
    ldr x1, =buffer
    mov x2, #0  // resultado
parse:
    ldrb w3, [x1], #1
    cmp w3, #'0'
    blt done_parse
    cmp w3, #'9'
    bgt done_parse
    sub w3, w3, #'0'
    mov x4, #10
    mul x2, x2, x4
    add x2, x2, x3
    b parse
done_parse:
    // x2 = número ingresado
    cmp x2, x10
    beq correcto

    // Si no es igual
    ldr x0, =msg_incorrecto
    mov x1, #len_incorrecto
    bl print_msg
    b intento

correcto:
    ldr x0, =msg_correcto
    mov x1, #len_correcto
    bl print_msg

    // Fin del programa
    mov x8, #93
    mov x0, #0
    svc #0

// --- print_msg (x0 = ptr, x1 = len) ---
print_msg:
    mov x2, x1
    mov x1, x0
    mov x0, #1
    mov x8, #64
    svc #0
    ret