GNU/Linux xterm-256color bash 204 views

// ****************************************************************************
// * Nombre del archivo: practica.s
// * Descripción: Programa que detecta si una cadena contiene 0
// * Autor: Roldan Castro Luis Alberto
// * Fecha: 10-04-2025
// * Plataforma: Raspberry Pi OS (64 bits)
// * Asciinema: https://asciinema.org/a/FgsbxRIIdAt5BlEwM6vb39SBC
// ****************************************************************************

// ****************************************************************************
// Version en JAVA
//
//import java.util.Scanner;
//
//public class DetectarCero {
//    public static void main(String[] args) {
//        Scanner scanner = new Scanner(System.in);
//
//        // Solicitar al usuario que ingrese una cadena
//        System.out.print("Ingrese una cadena: ");
//        String texto = scanner.nextLine();
//
//        // Verificar si la cadena contiene '0'
//        if (texto.contains("0")) {
//            System.out.println("La cadena contiene el número 0.");
//        } else {
//            System.out.println("La cadena NO contiene el número 0.");
//        }
//
//        scanner.close();
//    }
//}
// ****************************************************************************

.section .bss
input_buffer: .skip 64

.section .data
msg_pedir: .ascii "Ingrese una cadena: "
len_pedir = . - msg_pedir

msg_si: .ascii "La cadena contiene al menos un 0\n"
len_si = . - msg_si

msg_no: .ascii "La cadena NO contiene ningun 0\n"
len_no = . - msg_no

.section .text
.global _start

_start:
    // Mostrar mensaje de entrada
    ldr x0, =msg_pedir
    mov x1, #len_pedir
    bl print_msg

    // Leer entrada del usuario
    mov x0, #0
    ldr x1, =input_buffer
    mov x2, #64
    mov x8, #63
    svc #0
    mov x2, x0          // Longitud leída
    ldr x1, =input_buffer
    mov x3, #0          // Flag encontrado (0 = no, 1 = sí)

buscar_loop:
    cbz x2, verificar

    ldrb w4, [x1], #1
    sub x2, x2, #1

    cmp w4, #'0'
    b.ne buscar_loop
    mov x3, #1
    b verificar

verificar:
    cmp x3, #1
    beq contiene_cero

no_contiene:
    ldr x0, =msg_no
    mov x1, #len_no
    bl print_msg
    b salir

contiene_cero:
    ldr x0, =msg_si
    mov x1, #len_si
    bl print_msg

salir:
    mov x8, #93
    mov x0, #0
    svc #0

// -------------------------------------------
// Función print_msg
// x0 = dirección, x1 = longitud
print_msg:
    mov x2, x1
    mov x1, x0
    mov x0, #1
    mov x8, #64
    svc #0
    ret