35 lines
		
	
	
		
			799 B
		
	
	
	
		
			Common Lisp
		
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			799 B
		
	
	
	
		
			Common Lisp
		
	
	
	
| ((code
 | |
| 	(label main
 | |
| 		(load-immediate $0 35)
 | |
| 		(call &fib ($0) $0)
 | |
| 		(int-to-string $1 $0)
 | |
| 		(call &pln ($1) nil)
 | |
| 		(halt))
 | |
| 	(label fib
 | |
| 		(load-immediate $1 2)
 | |
| 		(jump-lt-int &base-case $0 $1)
 | |
| 		(load-immediate $3 2)
 | |
| 		(sub-int $4 $0 $3)
 | |
| 		(call &fib ($4) $5)
 | |
| 		(load-immediate $3 1)
 | |
| 		(sub-int $4 $0 $3)
 | |
| 		(call &fib ($4) $6)
 | |
| 		(add-int $7 $6 $5)
 | |
| 		(return $7)	
 | |
| 		(label base-case		
 | |
| 			(return $0)))
 | |
|   	(label pln 
 | |
| 		(load-immediate $1 &terminal-namespace) ; get terminal device
 | |
| 		(load-immediate $11 0)
 | |
| 		(syscall OPEN $1 $1 $11)	
 | |
| 		(load-immediate $3 &new-line)
 | |
| 		(load-offset-32 $7 $1 4) ; load handle
 | |
| 		(string-length $2 $0)
 | |
| 		(syscall WRITE $7 $0 $2)
 | |
| 		(string-length $4 $3)
 | |
| 		(syscall WRITE $7 $3 $4)
 | |
| 		(return nil)))
 | |
| (data 
 | |
| 	(label terminal-namespace "/dev/term/0")
 | |
| 	(label new-line "\n")))
 |