GNU/Linux xterm-256color zsh 149 views

.global _start

.section .rodata
msg_si: .asciz "ES FIBONACCI\n"
msg_no: .asciz "NO ES FIBONACCI\n"

.section .bss
input:  .skip 20

.section .text
_start:
    // Leer número desde teclado
    mov x0, #0           // STDIN
    ldr x1, =input
    mov x2, #20
    mov x8, #63          // syscall read
    svc 0

    // Convertir string a número → resultado en x6
    ldr x1, =input
    mov x6, #0           // acumulador
    mov x2, #0
    mov x9, #10

read_loop:
    ldrb w3, [x1, x2]
    cmp w3, #10
    beq convertir_fin
    sub w3, w3, #'0'
    uxtw x4, w3
    mul x6, x6, x9
    add x6, x6, x4
    add x2, x2, #1
    b read_loop
convertir_fin:

    // x6 tiene el número a verificar

    // Fibonacci iterativo: a = 0, b = 1
    mov x0, #0      // a
    mov x1, #1      // b

fib_loop:
    cmp x0, x6
    beq es_fibo
    cmp x0, x6
    bgt no_fibo

    add x2, x0, x1  // x2 = a + b
    mov x0, x1
    mov x1, x2
    b fib_loop

es_fibo:
    ldr x1, =msg_si
    mov x2, #13
    b imprimir

no_fibo:
    ldr x1, =msg_no
    mov x2, #17

imprimir:
    mov x0, #1      // STDOUT
    mov x8, #64     // syscall write
    svc 0

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