code: def _storestr(ins):
      
      op1 = ins.quad[1]
      indirect = op1[0] == '*'
      if indirect:
          op1 = op1[1:]
  
      immediate = op1[0] == '#'
      if immediate and not indirect:
          raise InvalidIC('storestr does not allow immediate destination', ins.quad)
  
      if not indirect:
          op1 = '#' + op1
  
      tmp1, tmp2, output = _str_oper(op1, ins.quad[2], no_exaf=True)
  
      if not tmp2:
          output.append('call __STORE_STR')
          REQUIRES.add('storestr.asm')
      else:
          output.append('call __STORE_STR2')
          REQUIRES.add('storestr2.asm')
  
      return output
docs: Stores a string value into a memory address.
      It copies content of 2nd operand (string), into 1st, reallocating
      dynamic memory for the 1st str. These instruction DOES ALLOW
      inmediate strings for the 2nd parameter, starting with '#'.
  
      Must prepend '#' (immediate sigil) to 1st operand, as we need
      the & address of the destination.