45 lines
1.1 KiB
Common Lisp
45 lines
1.1 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)
|
|
(load-immediate $11 0)
|
|
(syscall OPEN $10 $10 $11) ; Terminal term = open(namespace, flags)
|
|
|
|
(real-to-nat $1 $0)
|
|
(load-immediate $7 &prompt)
|
|
(string-length $8 $7)
|
|
(syscall WRITE $10 $7 $8) ; print prompt
|
|
|
|
(load-immediate $8 32)
|
|
(malloc $11 $8)
|
|
(syscall READ $10 $11 $8) ; read in max 32 byte string
|
|
|
|
(call &pln ($11) nil)
|
|
(nat-to-string $4 $1)
|
|
(call &pln ($4) nil)
|
|
(real-to-string $3 $0)
|
|
(call &pln ($3) nil)
|
|
(halt 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)
|
|
(string-length $2 $0)
|
|
(syscall WRITE $1 $0 $2)
|
|
(string-length $4 $3)
|
|
(syscall WRITE $1 $3 $4)
|
|
(return nil)))
|
|
(data
|
|
(label terminal-namespace "/dev/term/0")
|
|
(label prompt "Enter a string: ")
|
|
(label new-line "\n")))
|