user: 提供的汇编代码用C语言表示会是什么样子:

```asm
<qst>:
  endbr64
  push   %r15
  mov    %esi,%r11d
  push   %r14
  sub    %edi,%r11d
  push   %r13
  push   %r12
  mov    %rdx,%r12
  mov    %rsi,%rdx
  push   %rbp
  push   %rbx
  movslq %ecx,%rbx
  lea    -0x1(%rbx),%ecx
  mov    %rbx,%rax
  mov    %rbx,%r13
  sub    %rbx,%rdx
  shr    $0x4,%eax
  neg    %r13
  sub    $0x68,%rsp
  lea    -0x1(%rax),%ebp
  mov    %ebx,%eax
  mov    %ecx,0x1c(%rsp)
  mov    %ebx,%ecx
  add    $0x1,%rbp
  and    $0xfffffff0,%ecx
  mov    %rdi,0x38(%rsp)
  shl    $0x4,%rbp
  sub    %ecx,%eax
  mov    %ecx,%edi
  mov    %rsi,0x48(%rsp)
  mov    %eax,0x24(%rsp)
  sub    $0x1,%eax
  mov    %r8d,0x50(%rsp)
  mov    %ecx,0x30(%rsp)
  mov    %rdi,0x28(%rsp)
  mov    %rdx,0x40(%rsp)
  mov    %eax,0x34(%rsp)
  mov    %r13,0x8(%rsp)
  mov    %ebx,0x20(%rsp)
  mov    %r9d,0x54(%rsp)
  mov    %rdx,%r9
  mov    %rbx,0x10(%rsp)
  mov    %r11d,%ebx
L442:
  mov    0x20(%rsp),%ecx
  mov    %ebx,%eax
  mov    0x38(%rsp),%r15
  cltd
  idiv   %ecx
  sar    %eax
  imul   %ecx,%eax
  cltq
  mov    %rax,%r13
  add    %rax,%r15
  cmp    0x54(%rsp),%ebx
  jl     L343
  mov    %r9,0x58(%rsp)
  mov    0x38(%rsp),%rdi
  mov    %r15,%rsi
  call   *%r12
  mov    0x58(%rsp),%r9
  test   %eax,%eax
  jle    L480
  mov    0x38(%rsp),%rbx
  mov    0x40(%rsp),%rsi
  mov    %r9,0x58(%rsp)
  mov    %rbx,%rdi
  call   *%r12
  mov    0x58(%rsp),%r9
  mov    %rbx,%rcx
  test   %eax,%eax
  jg     L457
L231:
  cmp    %r15,%rcx
  jne    L589
L343:
  mov    0x38(%rsp),%r14
  mov    %r15,%r13
  mov    %r9,%rbx
  mov    %r14,%r15
  nopl   0x0(%rax,%rax,1)
L61:
  cmp    %r13,%r15
  jb     L381
L71:
  mov    %rbx,%r14
  cmp    %r13,%rbx
  jbe    L310
L428:
  mov    %rbx,%r14
L119:
  mov    %r14,%rsi
  mov    %r13,%rdi
  call   *%r12
  test   %eax,%eax
  jg     L409
  add    0x8(%rsp),%r14
  cmp    %r14,%r13
  jb     L119
L310:
  cmp    %r13,%r15
  je     L588
L402:
  mov    0x8(%rsp),%rax
  mov    %r15,%r8
  lea    (%r14,%rax,1),%rbx
  mov    %r13,%r14
  mov    %r15,%r13
L600:
  lea    0xf(%r15),%rax
  sub    %r14,%rax
  cmp    $0x1e,%rax
  jbe    L451
L26:
  mov    0x1c(%rsp),%eax
  cmp    $0x6,%eax
  jbe    L451
  cmp    $0xe,%eax
  jbe    L419
  xor    %eax,%eax
  nopl   0x0(%rax,%rax,1)
L52:
  movdqu (%r15,%rax,1),%xmm0
  movdqu (%r14,%rax,1),%xmm1
  movups %xmm1,(%r15,%rax,1)
  movups %xmm0,(%r14,%rax,1)
  add    $0x10,%rax
  cmp    %rbp,%rax
  jne    L52
  mov    0x28(%rsp),%rax
  mov    0x30(%rsp),%esi
  lea    (%r15,%rax,1),%rdx
  add    %r14,%rax
  cmp    %esi,0x20(%rsp)
  je     L237
  mov    0x24(%rsp),%edi
  cmpl   $0x6,0x34(%rsp)
  mov    %edi,%r10d
  jbe    L400
L46:
  add    %rsi,%r15
  add    %r14,%rsi
  mov    (%r15),%r11
  mov    (%rsi),%r14
  mov    %r14,(%r15)
  mov    %r11,(%rsi)
  mov    %r10d,%esi
  and    $0xfffffff8,%esi
  mov    %esi,%r11d
  sub    %esi,%edi
  add    %r11,%rdx
  add    %r11,%rax
  cmp    %r10d,%esi
  je     L237
L400:
  movzbl (%rdx),%esi
  movzbl (%rax),%r10d
  mov    %r10b,(%rdx)
  mov    %sil,(%rax)
  cmp    $0x1,%edi
  je     L237
  movzbl 0x1(%rdx),%esi
  movzbl 0x1(%rax),%r10d
  mov    %r10b,0x1(%rdx)
  mov    %sil,0x1(%rax)
  cmp    $0x2,%edi
  je     L237
  movzbl 0x2(%rdx),%esi
  movzbl 0x2(%rax),%r10d
  mov    %r10b,0x2(%rdx)
  mov    %sil,0x2(%rax)
  cmp    $0x3,%edi
  je     L237
  movzbl 0x3(%rdx),%esi
  movzbl 0x3(%rax),%r10d
  mov    %r10b,0x3(%rdx)
  mov    %sil,0x3(%rax)
  cmp    $0x4,%edi
  je     L237
  movzbl 0x4(%rdx),%esi
  movzbl 0x4(%rax),%r10d
  mov    %r10b,0x4(%rdx)
  mov    %sil,0x4(%rax)
  cmp    $0x5,%edi
  je     L237
  movzbl 0x5(%rdx),%esi
  movzbl 0x5(%rax),%r10d
  mov    %r10b,0x5(%rdx)
  mov    %sil,0x5(%rax)
  cmp    $0x6,%edi
  je     L237
  movzbl 0x6(%rdx),%esi
  movzbl 0x6(%rax),%edi
  mov    %dil,0x6(%rdx)
  mov    %sil,0x6(%rax)
L237:
  mov    %r8,%r15
  cmp    %r13,%r15
  jae    L71
L381:
  mov    %r13,%rsi
  mov    %r15,%rdi
  call   *%r12
  test   %eax,%eax
  jle    L1
  mov    %rbx,%r14
  cmp    %r13,%rbx
  ja     L428
  jmp    L402
  nopl   0x0(%rax)
L409:
  mov    0x10(%rsp),%rax
  lea    (%r15,%rax,1),%r8
  cmp    %r13,%r15
  je     L479
  mov    0x8(%rsp),%rax
  lea    (%r14,%rax,1),%rbx
  lea    0xf(%r15),%rax
  sub    %r14,%rax
  cmp    $0x1e,%rax
  ja     L26
L451:
  mov    0x1c(%rsp),%eax
  lea    0x1(%r14,%rax,1),%rsi
  nopl   0x0(%rax)
L594:
  movzbl (%r15),%eax
  movzbl (%r14),%edx
  add    $0x1,%r14
  add    $0x1,%r15
  mov    %dl,-0x1(%r15)
  mov    %al,-0x1(%r14)
  cmp    %rsi,%r14
  jne    L594
  jmp    L237
  nopw   0x0(%rax,%rax,1)
L479:
  mov    %r14,%r13
  mov    %r14,%rbx
  jmp    L600
  nopl   0x0(%rax,%rax,1)
L1:
  add    0x10(%rsp),%r15
  jmp    L61
L419:
  mov    0x20(%rsp),%edi
  mov    %r15,%rdx
  mov    %r14,%rax
  xor    %esi,%esi
  mov    %edi,%r10d
  jmp    L46
L588:
  mov    0x10(%rsp),%rax
  mov    %r15,%r14
  mov    %r14,%rdx
  sub    0x38(%rsp),%rdx
  lea    (%r15,%rax,1),%r15
  mov    0x48(%rsp),%rax
  mov    %edx,%ebx
  sub    %r15,%rax
  cmp    %eax,%edx
  jg     L420
  cmp    0x50(%rsp),%edx
  jge    L587
  mov    %r15,0x38(%rsp)
  mov    %eax,%ebx
  cmp    0x50(%rsp),%ebx
  jl     L107
L73:
  mov    0x48(%rsp),%rax
  mov    0x8(%rsp),%rcx
  add    %rcx,%rax
  mov    %rax,0x40(%rsp)
  mov    %rax,%r9
  jmp    L442
L420:
  cmp    0x50(%rsp),%eax
  jge    L637
  mov    %r14,0x48(%rsp)
  cmp    0x50(%rsp),%ebx
  jge    L73
L107:
  add    $0x68,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L480:
  mov    %r9,0x58(%rsp)
  mov    0x40(%rsp),%rsi
  mov    %r15,%rdi
  call   *%r12
  mov    0x58(%rsp),%r9
  test   %eax,%eax
  jle    L343
  cmp    %r15,0x38(%rsp)
  je     L457
  mov    0x38(%rsp),%rbx
  mov    0x40(%rsp),%r14
  mov    %r9,0x58(%rsp)
  mov    %r14,%rsi
  mov    %rbx,%rdi
  call   *%r12
  mov    0x58(%rsp),%r9
  mov    %rbx,%rcx
  test   %eax,%eax
  js     L466
L589:
  mov    0x38(%rsp),%rax
  lea    0x10(%rcx),%rdx
  lea    0x10(%rax,%r13,1),%rax
  cmp    %rax,%rcx
  setae  %al
  cmp    %rdx,%r15
  setae  %dl
  or     %dl,%al
  je     L595
  mov    0x1c(%rsp),%eax
  cmp    $0x6,%eax
  jbe    L595
  cmp    $0xe,%eax
  jbe    L262
  xor    %eax,%eax
L315:
  movdqu (%r15,%rax,1),%xmm0
  movdqu (%rcx,%rax,1),%xmm2
  movups %xmm2,(%r15,%rax,1)
  movups %xmm0,(%rcx,%rax,1)
  add    $0x10,%rax
  cmp    %rbp,%rax
  jne    L315
  mov    0x28(%rsp),%rax
  mov    0x30(%rsp),%r11d
  lea    (%r15,%rax,1),%rdx
  add    %rcx,%rax
  cmp    %r11d,0x20(%rsp)
  je     L343
  mov    0x24(%rsp),%esi
  cmpl   $0x6,0x34(%rsp)
  mov    %esi,%r10d
  jbe    L274
L88:
  mov    %r13,%rdi
  add    %r11,%rcx
  add    %r11,%rdi
  add    0x38(%rsp),%rdi
  mov    (%rcx),%rbx
  mov    (%rdi),%r11
  mov    %rbx,(%rdi)
  mov    %r11,(%rcx)
  mov    %r10d,%ecx
  and    $0xfffffff8,%ecx
  mov    %ecx,%edi
  sub    %ecx,%esi
  add    %rdi,%rdx
  add    %rdi,%rax
  cmp    %ecx,%r10d
  je     L343
L274:
  movzbl (%rdx),%ecx
  movzbl (%rax),%edi
  mov    %dil,(%rdx)
  mov    %cl,(%rax)
  cmp    $0x1,%esi
  je     L343
  movzbl 0x1(%rdx),%ecx
  movzbl 0x1(%rax),%edi
  mov    %dil,0x1(%rdx)
  mov    %cl,0x1(%rax)
  cmp    $0x2,%esi
  je     L343
  movzbl 0x2(%rdx),%ecx
  movzbl 0x2(%rax),%edi
  mov    %dil,0x2(%rdx)
  mov    %cl,0x2(%rax)
  cmp    $0x3,%esi
  je     L343
  movzbl 0x3(%rdx),%ecx
  movzbl 0x3(%rax),%edi
  mov    %dil,0x3(%rdx)
  mov    %cl,0x3(%rax)
  cmp    $0x4,%esi
  je     L343
  movzbl 0x4(%rdx),%ecx
  movzbl 0x4(%rax),%edi
  mov    %dil,0x4(%rdx)
  mov    %cl,0x4(%rax)
  cmp    $0x5,%esi
  je     L343
  movzbl 0x5(%rdx),%ecx
  movzbl 0x5(%rax),%edi
  mov    %dil,0x5(%rdx)
  mov    %cl,0x5(%rax)
  cmp    $0x6,%esi
  je     L343
  movzbl 0x6(%rdx),%ecx
  movzbl 0x6(%rax),%esi
  mov    %sil,0x6(%rdx)
  mov    %cl,0x6(%rax)
  jmp    L343
L587:
  mov    0x54(%rsp),%r9d
  mov    0x50(%rsp),%r8d
  mov    %r12,%rdx
  mov    %r14,%rsi
  mov    0x20(%rsp),%ecx
  mov    0x38(%rsp),%rdi
  mov    %rax,0x58(%rsp)
  call   <qst>
  mov    0x58(%rsp),%rax
  mov    %r15,0x38(%rsp)
  mov    0x40(%rsp),%r9
  mov    %eax,%ebx
  jmp    L442
L637:
  mov    0x54(%rsp),%r9d
  mov    0x20(%rsp),%ecx
  mov    %r12,%rdx
  mov    %r15,%rdi
  mov    0x50(%rsp),%r8d
  mov    0x48(%rsp),%rsi
  call   <qst>
  mov    0x8(%rsp),%rcx
  mov    %r14,%rax
  mov    %r14,0x48(%rsp)
  add    %rcx,%rax
  mov    %rax,0x40(%rsp)
  mov    %rax,%r9
  jmp    L442
L466:
  mov    %r14,%rcx
  jmp    L231
L457:
  mov    %r9,0x58(%rsp)
  mov    0x40(%rsp),%rsi
  mov    %r15,%rdi
  call   *%r12
  mov    0x58(%rsp),%r9
  test   %eax,%eax
  jns    L343
  mov    0x40(%rsp),%rcx
  jmp    L231
L595:
  mov    0x1c(%rsp),%eax
  lea    0x1(%r15,%rax,1),%rdx
  mov    %r15,%rax
L283:
  movzbl (%rax),%esi
  movzbl (%rcx),%edi
  add    $0x1,%rax
  add    $0x1,%rcx
  mov    %dil,-0x1(%rax)
  mov    %sil,-0x1(%rcx)
  cmp    %rdx,%rax
  jne    L283
  jmp    L343
L262:
  mov    0x20(%rsp),%esi
  mov    %rcx,%rax
  mov    %r15,%rdx
  xor    %r11d,%r11d
  mov    %esi,%r10d
  jmp    L88
```

assistant: ```c
void qst(char *base, char *max, int (*qcmp)(void *, void *), int qsz, int thresh, int mthresh) {
  register char c, *i, *j, *jj;
  register int ii;
  char *mid, *tmp;
  int lo, hi;
  lo = max - base;
  do {
    mid = i = base + qsz * ((lo / qsz) >> 1);
    if (lo >= mthresh) {
      j = (qcmp((jj = base), i) > 0 ? jj : i);
      if (qcmp(j, (tmp = max - qsz)) > 0) {
        j = (j == jj ? i : jj);
        if (qcmp(j, tmp) < 0)
          j = tmp;
      }
      if (j != i) {
        ii = qsz;
        do {
          c = *i;
          *i++ = *j;
          *j++ = c;
        } while (--ii);
      }
    }
    for (i = base, j = max - qsz;;) {
      while (i < mid && qcmp(i, mid) <= 0)
        i += qsz;
      while (j > mid) {
        if (qcmp(mid, j) <= 0) {
          j -= qsz;
          continue;
        }
        tmp = i + qsz;
        if (i == mid) {
          mid = jj = j;
        } else {
          jj = j;
          j -= qsz;
        }
        goto swap;
      }
      if (i == mid) {
        break;
      } else {
        jj = mid;
        tmp = mid = i;
        j -= qsz;
      }
    swap:
      ii = qsz;
      do {
        c = *i;
        *i++ = *jj;
        *jj++ = c;
      } while (--ii);
      i = tmp;
    }
    i = (j = mid) + qsz;
    if ((lo = j - base) <= (hi = max - i)) {
      if (lo >= thresh)
        qst(base, j, qcmp, qsz, thresh, mthresh);
      base = i;
      lo = hi;
    } else {
      if (hi >= thresh)
        qst(i, max, qcmp, qsz, thresh, mthresh);
      max = j;
    }
  } while (lo >= thresh);
}
```