((code (label main (push 35) (call &fib) (int-to-string) (call &pln) (halt)) (label fib (dup) ; dup num (push 2) ; Base case: n < 2 (jump-lt-int &base-case) (dup) (push 2) ; First call: fib(n-2) (sub-int) ; n - 2 (call &fib) (over) ; get n over the previous answer (push 1) ; Second call: fib(n-1) (sub-int) ; n-1 (using saved n) (call &fib) ; Result in $2 ; Combine results (add-int) ; fib(n-2) + fib(n-1) (return) ; Return result (label base-case (return))) ; Return n directly (label pln (dup) (string-length) (push &terminal-namespace) (syscall WRITE) (push &new-line) (dup) (string-length) (push &terminal-namespace) (syscall WRITE) (return))) (data (label terminal-namespace "/dev/term/0") (label new-line "\n")))