35 lines
600 B
Common Lisp
35 lines
600 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-str)
|
|
(string-length $4, $3)
|
|
(syscall DEVICE-WRITE, $2, $1, $4)
|
|
(halt))
|
|
(label fib
|
|
(pop $0)
|
|
(load-immediate $1 2)
|
|
(load $2 &base-case)
|
|
(jump-lt-int $2 $0 $1)
|
|
(load $2 2)
|
|
(sub-int $4 $0 $3)
|
|
(push $4)
|
|
(call &fib)
|
|
(load $2 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-str "/dev/term/0")))
|