user: 请将以下的汇编代码转换成C语言代码：

```asm
<iiqst>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  mov    %rdi,%rbp
  mov    %rsi,%r12
  mov    %rsi,%r13
  sub    %rdi,%r13
  sar    $0x2,%r13
  jmp    L44
L267:
  add    $0x4,%rdx
  jmp    L75
L218:
  sub    $0x4,%rax
  cmp    %rax,%rbx
  jb     L280
L91:
  cmp    %rbx,%rdx
  je     L226
L260:
  lea    -0x4(%rax),%rcx
  mov    %rdx,%rsi
  mov    %rbx,%rax
  mov    %rdx,%rbx
  jmp    L33
L106:
  cmp    %rbx,%rcx
  jbe    L204
L83:
  mov    (%rbx),%esi
  mov    %rcx,%rax
L280:
  cmp    (%rax),%esi
  jle    L218
  lea    0x4(%rdx),%rsi
  lea    -0x4(%rax),%rcx
  cmp    %rbx,%rdx
  je     L22
L33:
  mov    (%rdx),%edi
  mov    (%rax),%r8d
  mov    %r8d,(%rdx)
  mov    %edi,(%rax)
  mov    %rsi,%rdx
L75:
  cmp    %rbx,%rdx
  jae    L106
  mov    (%rbx),%eax
  cmp    %eax,(%rdx)
  jle    L267
  mov    %rcx,%rax
  cmp    %rbx,%rcx
  ja     L83
  jmp    L260
L204:
  mov    %rcx,%rax
  jmp    L91
L22:
  mov    %rax,%rbx
  mov    %rax,%rcx
  jmp    L33
L226:
  lea    0x4(%rbx),%r15
  mov    %rbx,%r14
  sub    %rbp,%r14
  sar    $0x2,%r14
  mov    %r12,%rax
  sub    %r15,%rax
  sar    $0x2,%rax
  mov    %eax,%r13d
  cmp    %eax,%r14d
  jg     L250
  test   %r14d,%r14d
  jg     L25
  mov    %r15,%rbp
L276:
  test   %r13d,%r13d
  jle    L170
L44:
  mov    %r13d,%eax
  shr    %eax
  mov    %eax,%eax
  lea    0x0(%rbp,%rax,4),%rbx
  cmp    $0x5,%r13d
  jle    L255
  mov    0x0(%rbp),%ecx
  mov    (%rbx),%edx
  cmp    %edx,%ecx
  jle    L271
  mov    -0x4(%r12),%esi
  mov    %rbp,%rax
  cmp    %esi,%ecx
  jle    L183
  lea    -0x4(%r12),%rax
  cmp    %esi,%edx
  jl     L183
  jmp    L255
L25:
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  call   <iiqst>
  mov    %r15,%rbp
  jmp    L276
L250:
  test   %eax,%eax
  jg     L70
  mov    %r14d,%r13d
  mov    %rbx,%r12
  jmp    L276
L70:
  mov    %r12,%rsi
  mov    %r15,%rdi
  call   <iiqst>
  mov    %r14d,%r13d
  mov    %rbx,%r12
  jmp    L276
L271:
  mov    -0x4(%r12),%esi
  cmp    %esi,%edx
  jle    L255
  lea    -0x4(%r12),%rax
  cmp    %rbx,%rbp
  je     L255
  cmp    %esi,%ecx
  cmovge %rbp,%rax
L183:
  cmp    %rbx,%rax
  je     L255
  mov    (%rax),%ecx
  mov    %ecx,(%rbx)
  mov    %edx,(%rax)
L255:
  lea    -0x4(%r12),%rcx
  mov    %rbp,%rdx
  jmp    L75
L170:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  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);
}
```