main: locals 0 1 push_int 12 store_var 0 1 # a = 12 push_var 0 1 put put_str "! = " push_var 0 1 set_arg 1 call -1 fact # f(a) put put_nl ret fact: locals 1 0 push_arg 0 1 push_int 0 jeq L1 # n == 0 jump L2 L1: push_int 1 ret L2: push_arg 0 1 push_arg 0 1 push_int 1 sub # n - 1 set_arg 1 call 0 fact # fact(n - 1) mult # n * fact(n - 1) ret