QUIZ  in class  29 June 2009

Given a Nut program to sum integer 1..10.   Write its N-code (similar to what a parser produce).  Then do code generation by hands to generate S-code.

(def main () (i s)
  (do
    (set s 0)
    (set i 1)
    (while (<= i 10)
      (do
        (set s (+ s i))
        (set i (+ i 1))))))

;  please note that in actual Nut program <= must be defined
;  (def <= (a b) () (if (> a b) 0 1))

Answer

N-code
(fun.0.2 (do
(put.2 lit.0 )
(put.1 lit.1 )
(while (<= get.1 lit.10 )
(do (put.2 (+ get.2 get.1 ))
(put.1 (+ get.1 lit.1 ))))))

S-code
1 fun.0.2
2 lit.0
3 put.2
4 lit.1
5 put.1
6 get.1
7 lit.10
8 le
9 jf.19   <out>
10 get.2
11 get.1
12 add
13 put.2
14 get.1
15 lit.1
16 add
17 put.1
18 jmp.6 <loop>
19 ret

End