GNU/Linux xterm-256color bash 179 views

/*
Autor: Victor Manuel Madrid Lugo
Fecha: 09/04/2025
Descripción: Determina si una letra ingresada es vocal o consonante
Demostración: [https://asciinema.org/a/4oK0PCsKV82I4K9qTjXpFgYSM]

Equivalente en Java:
import java.util.Scanner;

public class VocalConsonante {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Ingrese una letra: ");
        char letra = sc.next().charAt(0);
        
        if (letra == 'a' || letra == 'e' || letra == 'i' || letra == 'o' || letra == 'u' ||
            letra == 'A' || letra == 'E' || letra == 'I' || letra == 'O' || letra == 'U') {
            System.out.println("Es una vocal");
        } else {
            System.out.println("Es una consonante");
        }
    }
}
*/

.section .data
    msg_prompt:    .asciz "Ingrese una letra: "
    msg_vocal:     .asciz "Es una vocal\n"
    msg_consonante: .asciz "Es una consonante\n"
    buffer:        .skip 2       // Buffer para la letra + newline

.section .text
.global _start

_start:
    // Mostrar mensaje
    mov x0, #1
    ldr x1, =msg_prompt
    mov x2, #18          // Longitud de msg_prompt
    mov x8, #64          // syscall write
    svc #0

    // Leer letra
    mov x0, #0
    ldr x1, =buffer
    mov x2, #2           // Leer 1 carácter + newline
    mov x8, #63          // syscall read
    svc #0

    // Cargar letra (convertir a minúscula para simplificar comparación)
    ldrb w19, [x1]       // w19 = letra ingresada
    orr w19, w19, #0x20  // Convertir a minúscula (bit 5 = 1)

    // Comparar con vocales
    cmp w19, #'a'
    beq es_vocal
    cmp w19, #'e'
    beq es_vocal
    cmp w19, #'i'
    beq es_vocal
    cmp w19, #'o'
    beq es_vocal
    cmp w19, #'u'
    beq es_vocal

    // Si no es vocal
    mov x0, #1
    ldr x1, =msg_consonante
    mov x2, #18          // Longitud de msg_consonante
    mov x8, #64
    svc #0
    b exit

es_vocal:
    mov x0, #1
    ldr x1, =msg_vocal
    mov x2, #13          // Longitud de msg_vocal
    mov x8, #64
    svc #0

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