user: 下面的汇编指令对应的C源代码是什么：

```asm
<iiqst>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbx
  sub    $0x28,%rsp
  mov    %rdi,-0x48(%rbp)
  mov    %rsi,-0x50(%rbp)
  mov    -0x50(%rbp),%rax
  sub    -0x48(%rbp),%rax
  sar    $0x2,%rax
  mov    %eax,-0x40(%rbp)
L110:
  mov    -0x40(%rbp),%eax
  shr    %eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x48(%rbp),%rax
  lea    (%rdx,%rax,1),%r12
  cmpl   $0x5,-0x40(%rbp)
  jle    L119
  mov    -0x48(%rbp),%rax
  mov    (%rax),%edx
  mov    (%r12),%eax
  cmp    %eax,%edx
  jle    L20
  mov    -0x48(%rbp),%rax
  jmp    L170
L20:
  mov    %r12,%rax
L170:
  mov    %rax,%rbx
  mov    -0x50(%rbp),%rax
  sub    $0x4,%rax
  mov    %rax,-0x38(%rbp)
  mov    (%rbx),%edx
  mov    -0x38(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,%edx
  jle    L78
  cmp    -0x48(%rbp),%rbx
  jne    L102
  mov    %r12,%rax
  jmp    L133
L102:
  mov    -0x48(%rbp),%rax
L133:
  mov    %rax,%rbx
  mov    (%rbx),%edx
  mov    -0x38(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,%edx
  jge    L78
  mov    -0x38(%rbp),%rbx
L78:
  cmp    %r12,%rbx
  je     L119
  mov    (%r12),%r14d
  mov    (%rbx),%eax
  mov    %eax,(%r12)
  mov    %r14d,(%rbx)
L119:
  mov    -0x48(%rbp),%r13
  mov    -0x50(%rbp),%rax
  lea    -0x4(%rax),%rbx
  jmp    L193
L136:
  add    $0x4,%r13
L193:
  cmp    %r12,%r13
  jae    L176
  mov    0x0(%r13),%edx
  mov    (%r12),%eax
  cmp    %eax,%edx
  jle    L136
  jmp    L176
L158:
  mov    (%r12),%edx
  mov    (%rbx),%eax
  cmp    %eax,%edx
  jg     L201
  sub    $0x4,%rbx
  jmp    L176
L201:
  lea    0x4(%r13),%rax
  mov    %rax,-0x38(%rbp)
  cmp    %r12,%r13
  jne    L181
  mov    %rbx,%r15
  mov    %r15,%r12
  jmp    L25
L181:
  mov    %rbx,%rax
  lea    -0x4(%rax),%rbx
  mov    %rax,%r15
  jmp    L25
L176:
  cmp    %r12,%rbx
  ja     L158
  cmp    %r12,%r13
  je     L249
  mov    %r12,%r15
  mov    %r13,%r12
  mov    %r12,-0x38(%rbp)
  sub    $0x4,%rbx
L25:
  mov    0x0(%r13),%r14d
  mov    (%r15),%eax
  mov    %eax,0x0(%r13)
  mov    %r14d,(%r15)
  mov    -0x38(%rbp),%r13
  jmp    L193
L249:
  nop
  mov    %r12,%rbx
  lea    0x4(%rbx),%r13
  mov    %rbx,%rax
  sub    -0x48(%rbp),%rax
  sar    $0x2,%rax
  mov    %eax,-0x40(%rbp)
  mov    -0x50(%rbp),%rax
  sub    %r13,%rax
  sar    $0x2,%rax
  mov    %eax,-0x3c(%rbp)
  mov    -0x40(%rbp),%eax
  cmp    -0x3c(%rbp),%eax
  jg     L64
  cmpl   $0x0,-0x40(%rbp)
  jle    L236
  mov    -0x48(%rbp),%rax
  mov    %rbx,%rsi
  mov    %rax,%rdi
  call   <iiqst>
L236:
  mov    %r13,-0x48(%rbp)
  mov    -0x3c(%rbp),%eax
  mov    %eax,-0x40(%rbp)
  jmp    L161
L64:
  cmpl   $0x0,-0x3c(%rbp)
  jle    L151
  mov    -0x50(%rbp),%rax
  mov    %rax,%rsi
  mov    %r13,%rdi
  call   <iiqst>
L151:
  mov    %rbx,-0x50(%rbp)
L161:
  cmpl   $0x0,-0x40(%rbp)
  jg     L110
  nop
  nop
  add    $0x28,%rsp
  pop    %rbx
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  pop    %rbp
  ret
```

assistant: ```c
void iiqst(int *base, int *max) {
  register int *i;
  register int *j;
  register int *jj;
  register int *mid;
  register int ii;
  register int c;
  int *tmp;
  int lo;
  int hi;
  lo = max - base;
  do {
    mid = base + ((unsigned)lo >> 1);
    if (lo >= 6) {
      j = (*base > *mid ? base : mid);
      tmp = max - 1;
      if (*j > *tmp) {
        j = (j == base ? mid : base);
        if (*j < *tmp)
          j = tmp;
      }
      if (j != mid) {
        c = *mid;
        *mid = *j;
        *j = c;
      }
    }
    for (i = base, j = max - 1;;) {
      while (i < mid && *i <= *mid)
        i++;
      while (j > mid) {
        if (*mid <= *j) {
          j--;
          continue;
        }
        tmp = i + 1;
        if (i == mid)
          mid = jj = j;
        else
          jj = j--;
        goto swap;
      }
      if (i == mid)
        break;
      else {
        jj = mid;
        tmp = mid = i;
        j--;
      }
    swap:
      c = *i;
      *i = *jj;
      *jj = c;
      i = tmp;
    }
    i = (j = mid) + 1;
    if ((lo = j - base) <= (hi = max - i)) {
      if (lo >= 1)
        iiqst(base, j);
      base = i;
      lo = hi;
    } else {
      if (hi >= 1)
        iiqst(i, max);
      max = j;
    }
  } while (lo >= 1);
}
```