( ; using a coroutine as a generator (spawn r15 fibo) (ld r0 20) (:next) (ld r1 @r15) ; Read a yielded value (call printnum r1) (lds @cout ", ") (dec r0) (j.nz :next) (ld @cout '\n') (halt) (proc fibo (ld r0 0) (ld r1 1) (:x) (yield r1) (add r2 r0 r1) (ld r0 r1) (ld r1 r2) (j :x) ) (proc printnum num (mkbf r15) (ld r1 num) (tst r1 (<0? (mul r1 -1))) (:next) (mod r0 r1 10) (add r0 '0') (bfrpush @r15 r0) (div r1 10 (z? (tst num (<0? (bfrpush @r15 '-'))) (lds @cout @r15) (del @r15) (ret))) (j :next) ) )