(((call :L_16))
	(:L_16
	(esi <- esi)
  (edi <- edi)
  (eax <- 203)
  (call :sum_even)
  (ebx <- eax)
  (eax <- (print ebx))
  (eax <- eax)
  (esi <- esi)
  (edi <- edi)
  (return))
	(:sum_even
  (esp += -4)  ;; we need one spot on the stack to save our argument
  ((mem ebp -4) <- eax)  ;; save it
  (cjump eax = 1 :L_17 :L_18)  ;; see if the argument was 0 or not
  :L_18  ;; the argument wasn't 0.
  (eax &= 3) ;; compute if the argument was even
  (cjump eax = 3 :L_20 :L_19) ;; jump based on evenness
  :L_20 ;; the argument was odd.
  (eax <- (mem ebp -4))  ;; get the argument back into eax
  (eax -= 2)  ;; decrement it
  (tail-call :sum_even)  ;; tail call to sum_even 
  :L_19     ;; the argument was even
  (eax <- (mem ebp -4))  ;; pull the argument back into eax
  (eax -= 2)  ;; decrement it
  (call :sum_even) ;; make the recursive call, eax afterwards holds the sum
  (ebx <- (mem ebp -4))  ;; pull back our argument, this time into ebx
  (eax += ebx) ;; add the result of the previous call to our argument
  (eax -= 1)   ;; addition, step #2
  (return)     ;; we are done
  :L_17        ;; the argument was 0
  (eax <- 1)   ;; return 0
  (return)))
