GNU/Linux xterm-256color zsh 137 views

.section .data
msg_si:   .asciz "Es primo\n"
msg_no:   .asciz "No es primo\n"

.section .text
.global _start

_start:
    // --- Número a evaluar ---
    mov x0, #6              // <- Cambia este valor para probar otro número

    // --- Casos triviales ---
    cmp x0, #2
    b.lt no_primo           // si n < 2 → no primo

    // --- Inicializar índice divisor ---
    mov x1, #2              // i = 2

    // --- Inicialmente asumimos que sí es primo ---
    mov x2, #1              // esPrimo = 1

bucle:
    cmp x1, x0
    bge salir_bucle         // si i >= n, terminamos

    // --- Verificar si n % i == 0 ---
    udiv x3, x0, x1         // x3 = n / i
    mul x4, x3, x1          // x4 = (n / i) * i
    cmp x4, x0              // si (x4 == n) => divisible
    b.eq no_primo_set_flag

    add x1, x1, #1          // i++
    b bucle

no_primo_set_flag:
    mov x2, #0              // esPrimo = 0

salir_bucle:
    // --- Revisar bandera x2 ---
    cmp x2, #1
    b.eq es_primo
    b no_primo              // salto corregido

es_primo:
    ldr x1, =msg_si
    mov x2, #9              // longitud del mensaje
    b imprimir

no_primo:
    ldr x1, =msg_no
    mov x2, #13

imprimir:
    mov x0, #1              // fd = stdout
    mov x8, #64             // syscall write
    svc #0

    // --- Terminar programa ---
    mov x8, #93             // syscall exit
    mov x0, #0
    svc #0