undar-lang/test/fib.asm.lisp

38 lines
738 B
Common Lisp

((code
(label main
(load-immediate $0 35)
(push $0)
(call &fib)
(pop $0)
(int-to-string $1 $0)
(load-immediate $2 &terminal-namespace)
(string-length $4 $3)
(syscall DEVICE-WRITE $2 $1 $4)
(load-immediate $11 &new-line)
(string-length $12 $11)
(syscall DEVICE-WRITE $2 $11 $12)
(halt))
(label fib
(pop $0)
(load-immediate $1 2)
(jump-lt-int &base-case $0 $1)
(load-immediate $3 2)
(sub-int $4 $0 $3)
(push $4)
(call &fib)
(load-immediate $3 1)
(sub-int $4 $0 $3)
(push $4)
(call &fib)
(pop $4)
(pop $5)
(add-int $6 $5 $4)
(push $6)
(return)
(label base-case
(push $0)
(return))))
(data
(label terminal-namespace "/dev/term/0")
(label new-line "\n")))