let string_of_register = function
  | Reg_int (-2) -> "%esp"
  | Reg_int (-1) -> "%ebp"
  | Reg_int 0 -> "%eax"
  | Reg_int 1 -> "%ebx"
  | Reg_int 2 -> "%ecx"
  | Reg_int 3 -> "%edx"
  | Reg_int 4 -> "%esi"
  | Reg_int 5 -> "%edi"
  | Reg_flag _ -> raise (Asm_error "trying to use flags as register")
  | _ -> raise (Asm_error "trying to use a register > %edx!")