code: def _shru8(ins):
      
      op1, op2 = tuple(ins.quad[2:])
  
      if is_int(op2):
          op2 = int8(op2)
  
          output = _8bit_oper(op1)
          if op2 == 0:
              output.append('push af')
              return output
  
          if op2 < 4:
              output.extend(['srl a'] * op2)
              output.append('push af')
              return output
  
          label = tmp_label()
          output.append('ld b, %i' % int8(op2))
          output.append('%s:' % label)
          output.append('srl a')
          output.append('djnz %s' % label)
          output.append('push af')
          return output
  
      if is_int(op1) and int(op1) == 0:
          output = _8bit_oper(op2)
          output.append('xor a')
          output.append('push af')
          return output
  
      output = _8bit_oper(op1, op2, True)
      label = tmp_label()
      label2 = tmp_label()
      output.append('or a')
      output.append('ld b, a')
      output.append('ld a, h')
      output.append('jr z, %s' % label2)
      output.append('%s:' % label)
      output.append('srl a')
      output.append('djnz %s' % label)
      output.append('%s:' % label2)
      output.append('push af')
      return output
docs: Shift 8bit unsigned integer to the right. The result is pushed onto the stack.
  
      Optimizations:
        * If 1nd or 2nd op is 0 then
          do nothing
  
        * If 2nd op is < 4 then
          unroll loop