undar-lang/test/loop.asm.lisp

43 lines
992 B
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)
(push $2)
(call &println)
(nat-to-string $4 $1)
(push $4)
(call &println)
(real-to-string $3 $0)
(push $3)
(call &println)
(halt))
(label println
(load-immediate $0 &terminal-namespace)
(load-immediate $3 &new-line)
(pop $1)
(string-length $2 $1)
(syscall WRITE $0 $1 $2)
(string-length $4 $3)
(syscall WRITE $0 $3 $4)
(return)))
(data
(label terminal-namespace "/dev/term/0")
(label help "Enter a string: ")
(label new-line "\n")))