;; factorial
(((eax <- 1)
  (edx <- 20)
  (call :fact)
  (eax *= 2)
  (eax += 1)
  (eax <- (print eax)))
 (:fact
  (cjump edx <= 0 :done :continue)
  :continue
  (eax *= edx)
  (edx -= 1)
  (tail-call :fact)
  :done
  (return)))
