42 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Common Lisp
		
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Common Lisp
		
	
	
	
| ((code 
 | |
| 	(label main
 | |
| 		(load-immediate $0 5.0)
 | |
| 		(load-immediate $1 5000)
 | |
| 		(load-immediate $2 0)
 | |
| 		(load-immediate $3 -1)
 | |
| 		(load-immediate $5 5.0)
 | |
| 		(label loop-body
 | |
| 			(add-real $0 $0 $5)
 | |
| 			(add-int $1 $1 $3)
 | |
| 			(jump-ge-int &loop-body $1 $2))
 | |
| 		(load-immediate $10 &terminal-namespace)
 | |
| 		(real-to-nat $1 $0)
 | |
| 		(load-immediate $7 &help)
 | |
| 		(string-length $8 $7)
 | |
| 		(syscall WRITE $10 $7 $8)
 | |
| 		(load-immediate $8 32)
 | |
| 
 | |
| 		(malloc $11 $8)
 | |
| 		(syscall READ $10 $2 $8 $11)
 | |
| 		(call &pln ($2) nil)
 | |
| 		(nat-to-string $4 $1)
 | |
| 		(call &pln ($4) nil)
 | |
| 		(real-to-string $3 $0)
 | |
| 		(call &pln ($3) nil)
 | |
| 		(halt))
 | |
|   	(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 help "Enter a string: ")
 | |
| 	(label new-line "\n")))
 |