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