code: def _sub8(ins):
      
  
      op1, op2 = tuple(ins.quad[2:])
      if is_int(op2):  # 2nd operand
          op2 = int8(op2)
          output = _8bit_oper(op1)
  
          if op2 == 0:
              output.append('push af')
              return output  # A - 0 = A
  
          op2 = int8(op2)
  
          if op2 == 1:  # A - 1 == DEC A
              output.append('dec a')
              output.append('push af')
              return output
  
          if op2 == 0xFF:  # A - (-1) == INC A
              output.append('inc a')
              output.append('push af')
              return output
  
          output.append('sub %i' % op2)
          output.append('push af')
          return output
  
      if is_int(op1):  # 1st operand is numeric?
          if int8(op1) == 0:  # 0 - A = -A ==> NEG A
              output = _8bit_oper(op2)
              output.append('neg')
              output.append('push af')
              return output
  
      # At this point, even if 1st operand is numeric, proceed
      # normally
  
      if op2[0] == '_':  # Optimization when 2nd operand is an id
          rev = True
          op1, op2 = op2, op1
      else:
          rev = False
  
      output = _8bit_oper(op1, op2, rev)
      output.append('sub h')
      output.append('push af')
  
      return output
docs: Pops last 2 bytes from the stack and subtract them.
      Then push the result onto the stack. Top-1 of the stack is
      subtracted Top
      _sub8 t1, a, b === t1 <-- a - b
  
      Optimizations:
        * If 2nd op is ZERO,
          then do NOTHING: A - 0 = A
  
        * If 1st operand is 0, then
          just do a NEG
  
        * If any of the operands is 1, then
          DEC is used
  
        * If any of the operands is -1 (255), then
          INC is used