undar-lang/test/fib.asm.lisp

45 lines
909 B
Common Lisp

((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")))