user: 请从给定的汇编指令推导出C源代码:

```asm
<quick>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x68,%rsp
  mov    %edx,0x34(%rsp)
  cmp    %esi,%edx
  jl     L272
  mov    %rdi,%r14
  mov    %esi,%r15d
L721:
  movslq %r15d,%rax
  lea    0x1(%r15),%r13d
  mov    %rax,0x8(%rsp)
  mov    (%r14,%rax,4),%ecx
  mov    %r13d,%r12d
  cmp    %r13d,0x34(%rsp)
  jl     L589
  mov    %r13d,0x14(%rsp)
  movslq %r13d,%rbx
  mov    %r15d,%ebp
  mov    %ecx,%r13d
  jmp    L754
L789:
  lea    0x1(%rbp),%eax
  add    $0x1,%rbx
  cmp    %ebx,0x34(%rsp)
  jl     L461
L383:
  mov    %eax,%r12d
L754:
  mov    %ebx,%esi
  cmp    %r13d,(%r14,%rbx,4)
  jge    L789
  mov    %r12d,%edx
  mov    %r14,%rdi
  add    $0x1,%rbx
  call   <swap@plt>
  lea    0x1(%r12),%eax
  cmp    %ebx,0x34(%rsp)
  jl     L462
  mov    %r12d,%ebp
  jmp    L383
L272:
  add    $0x68,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L461:
  mov    %eax,0x48(%rsp)
  mov    0x14(%rsp),%r13d
L448:
  mov    %ebp,%edx
  mov    %r15d,%esi
  mov    %r14,%rdi
  call   <swap@plt>
  lea    -0x1(%rbp),%eax
  mov    %eax,0x28(%rsp)
  cmp    %r15d,%eax
  jl     L840
  mov    %r13d,%eax
  mov    %r15d,%r13d
  mov    %r14,%r15
  mov    %eax,%r14d
  mov    0x8(%rsp),%rax
  mov    %r14d,%r12d
  mov    (%r15,%rax,4),%ecx
  cmp    %r14d,0x28(%rsp)
  jl     L485
L210:
  mov    %r14d,0x14(%rsp)
  movslq %r14d,%rbx
  mov    %r13d,%ebp
  mov    %r13d,%r14d
  mov    %ecx,%r13d
  jmp    L130
L82:
  lea    0x1(%rbp),%eax
  add    $0x1,%rbx
  cmp    %ebx,0x28(%rsp)
  jl     L185
L165:
  mov    %eax,%r12d
L130:
  mov    %ebx,%esi
  cmp    (%r15,%rbx,4),%r13d
  jle    L82
  mov    %r12d,%edx
  mov    %r15,%rdi
  add    $0x1,%rbx
  call   <swap@plt>
  lea    0x1(%r12),%eax
  cmp    %ebx,0x28(%rsp)
  jl     L341
  mov    %r12d,%ebp
  jmp    L165
L185:
  mov    %eax,0x44(%rsp)
  mov    %r14d,%r13d
  mov    0x14(%rsp),%r14d
L433:
  mov    %ebp,%edx
  mov    %r13d,%esi
  mov    %r15,%rdi
  call   <swap@plt>
  lea    -0x1(%rbp),%eax
  mov    %eax,0x2c(%rsp)
  cmp    %r13d,%eax
  jl     L708
  mov    0x8(%rsp),%rax
  mov    %r13d,%r12d
  mov    %r14d,%r13d
L205:
  mov    (%r15,%rax,4),%r14d
  cmp    %r13d,0x2c(%rsp)
  jl     L151
  movslq %r13d,%rbx
  mov    %r12d,%edx
  mov    %r13d,%ebp
L105:
  mov    %ebx,%esi
  cmp    (%r15,%rbx,4),%r14d
  jg     L477
  lea    0x1(%rdx),%ebp
  add    $0x1,%rbx
  cmp    %ebx,0x2c(%rsp)
  jge    L105
  mov    %ebp,0x40(%rsp)
  mov    %edx,%ebp
  jmp    L114
L477:
  mov    %ebp,%edx
  mov    %r15,%rdi
  add    $0x1,%rbx
  call   <swap@plt>
  lea    0x1(%rbp),%eax
  cmp    %ebx,0x2c(%rsp)
  jl     L487
  mov    %ebp,%edx
  mov    %eax,%ebp
  jmp    L105
L151:
  mov    %r12d,%edx
  mov    %r12d,%esi
  mov    %r15,%rdi
  call   <swap@plt>
L708:
  mov    0x44(%rsp),%edi
  cmp    %edi,0x28(%rsp)
  jl     L380
  movslq %edi,%rax
  lea    0x1(%rax),%r14d
  mov    %rax,0x8(%rsp)
  mov    (%r15,%rax,4),%ecx
  mov    %rax,%r13
  mov    %r14d,%r12d
  cmp    %r14d,0x28(%rsp)
  jge    L210
L485:
  mov    %r13d,%edx
  mov    %r13d,%esi
  mov    %r15,%rdi
  mov    %r15,%r14
  call   <swap@plt>
  jmp    L840
L487:
  mov    %eax,0x40(%rsp)
L114:
  mov    %ebp,%edx
  mov    %r12d,%esi
  mov    %r15,%rdi
  call   <swap@plt>
  lea    -0x1(%rbp),%eax
  mov    %eax,0x30(%rsp)
  cmp    %r12d,%eax
  jl     L679
  mov    0x8(%rsp),%rax
  mov    %r15,%r14
  mov    (%r14,%rax,4),%r15d
  cmp    %r13d,0x30(%rsp)
  jl     L422
L269:
  movslq %r13d,%rbx
  mov    %r12d,%edx
  mov    %r13d,%ebp
L798:
  mov    %ebx,%esi
  cmp    (%r14,%rbx,4),%r15d
  jg     L814
  lea    0x1(%rdx),%ebp
  add    $0x1,%rbx
  cmp    %ebx,0x30(%rsp)
  jge    L798
  mov    %ebp,0x58(%rsp)
  mov    %edx,%ebp
L292:
  mov    %ebp,%edx
  mov    %r12d,%esi
  mov    %r14,%rdi
  call   <swap@plt>
  lea    -0x1(%rbp),%eax
  mov    %eax,0x20(%rsp)
  cmp    %r12d,%eax
  jl     L319
  mov    0x8(%rsp),%rax
  mov    (%r14,%rax,4),%r15d
  cmp    %r13d,0x20(%rsp)
  jl     L848
L600:
  movslq %r13d,%rbx
  mov    %r12d,%edx
  mov    %r13d,%ebp
L741:
  mov    %ebx,%esi
  cmp    (%r14,%rbx,4),%r15d
  jg     L658
  lea    0x1(%rdx),%ebp
  add    $0x1,%rbx
  cmp    %ebx,0x20(%rsp)
  jge    L741
  mov    %ebp,0x4c(%rsp)
  mov    %edx,%ebp
L578:
  mov    %ebp,%edx
  mov    %r12d,%esi
  mov    %r14,%rdi
  call   <swap@plt>
  lea    -0x1(%rbp),%eax
  mov    %eax,0x24(%rsp)
  cmp    %r12d,%eax
  jl     L644
  mov    %r13d,%ebp
  mov    0x8(%rsp),%r13
L293:
  mov    %ebp,0x8(%rsp)
  mov    (%r14,%r13,4),%r15d
  cmp    %ebp,0x24(%rsp)
  jge    L338
  mov    %r12d,%edx
  mov    %r12d,%esi
  mov    %r14,%rdi
  call   <swap@plt>
L644:
  mov    0x4c(%rsp),%edi
  cmp    %edi,0x20(%rsp)
  jl     L319
  movslq %edi,%rax
  mov    %rax,0x8(%rsp)
  mov    %rax,%r12
  lea    0x1(%rax),%r13d
  mov    0x8(%rsp),%rax
  mov    (%r14,%rax,4),%r15d
  cmp    %r13d,0x20(%rsp)
  jge    L600
L848:
  mov    %r12d,%edx
  mov    %r12d,%esi
  mov    %r14,%rdi
  call   <swap@plt>
L319:
  mov    0x58(%rsp),%edi
  cmp    %edi,0x30(%rsp)
  jl     L579
  movslq %edi,%rax
  mov    %rax,0x8(%rsp)
  mov    (%r14,%rax,4),%r15d
  mov    %rax,%r12
  lea    0x1(%rax),%r13d
  cmp    %r13d,0x30(%rsp)
  jge    L269
L422:
  mov    %r12d,%edx
  mov    %r12d,%esi
  mov    %r14,%rdi
  mov    %r14,%r15
  call   <swap@plt>
L679:
  mov    0x40(%rsp),%edi
  cmp    %edi,0x2c(%rsp)
  jl     L708
  movslq %edi,%rax
  mov    %rax,0x8(%rsp)
  mov    %rax,%r12
  lea    0x1(%rax),%r13d
  jmp    L205
L658:
  mov    %ebp,%edx
  mov    %r14,%rdi
  add    $0x1,%rbx
  call   <swap@plt>
  lea    0x1(%rbp),%eax
  cmp    %ebx,0x20(%rsp)
  jl     L826
  mov    %ebp,%edx
  mov    %eax,%ebp
  jmp    L741
L814:
  mov    %ebp,%edx
  mov    %r14,%rdi
  add    $0x1,%rbx
  call   <swap@plt>
  lea    0x1(%rbp),%eax
  cmp    %ebx,0x30(%rsp)
  jl     L307
  mov    %ebp,%edx
  mov    %eax,%ebp
  jmp    L798
L338:
  movslq %ebp,%rbx
  mov    %r12d,%edx
L5:
  mov    %ebx,%esi
  cmp    (%r14,%rbx,4),%r15d
  jle    L632
  mov    0x8(%rsp),%edx
  mov    %r14,%rdi
  add    $0x1,%rbx
  call   <swap@plt>
  mov    0x8(%rsp),%edx
  cmp    %ebx,0x24(%rsp)
  lea    0x1(%rdx),%eax
  mov    %eax,0x8(%rsp)
  jge    L5
L609:
  mov    %r12d,%esi
  mov    %r14,%rdi
  mov    %edx,0x14(%rsp)
  call   <swap@plt>
  mov    0x14(%rsp),%edx
  lea    -0x1(%rdx),%eax
  mov    %eax,0x18(%rsp)
  cmp    %r12d,%eax
  jl     L863
L445:
  mov    (%r14,%r13,4),%r8d
  mov    %ebp,%ebx
  cmp    %ebp,0x18(%rsp)
  jge    L558
  mov    %r12d,%edx
  mov    %r12d,%esi
  mov    %r14,%rdi
  call   <swap@plt>
L863:
  mov    0x8(%rsp),%ecx
  cmp    %ecx,0x24(%rsp)
  jl     L644
  movslq %ecx,%r13
  mov    %r13,%r12
  lea    0x1(%r13),%ebp
  jmp    L293
L632:
  lea    0x1(%rdx),%eax
  add    $0x1,%rbx
  mov    %eax,0x8(%rsp)
  cmp    %ebx,0x24(%rsp)
  jl     L609
  jmp    L5
L826:
  mov    %eax,0x4c(%rsp)
  jmp    L578
L307:
  mov    %eax,0x58(%rsp)
  jmp    L292
L558:
  mov    %r8d,0x14(%rsp)
  mov    %r13,%rdi
  movslq %ebp,%r15
  mov    %ebp,%r13d
  mov    %r12d,%eax
  mov    %rdi,%rbp
L404:
  mov    0x14(%rsp),%edi
  mov    %r15d,%esi
  cmp    (%r14,%r15,4),%edi
  jle    L173
  mov    %ebx,%edx
  mov    %r14,%rdi
  add    $0x1,%r15
  call   <swap@plt>
  lea    0x1(%rbx),%eax
  mov    %eax,0x1c(%rsp)
  cmp    %r15d,0x18(%rsp)
  jge    L416
  mov    %rbp,%rax
  mov    %r13d,%ebp
  mov    %rax,%r13
L106:
  mov    %ebx,%edx
  mov    %r12d,%esi
  mov    %r14,%rdi
  sub    $0x1,%ebx
  call   <swap@plt>
  cmp    %r12d,%ebx
  jge    L65
  nopl   0x0(%rax,%rax,1)
L671:
  mov    0x18(%rsp),%edi
  cmp    %edi,0x1c(%rsp)
  jg     L863
  movslq 0x1c(%rsp),%r13
  mov    %r13,%r12
  lea    0x1(%r13),%ebp
  jmp    L445
L173:
  lea    0x1(%rax),%ecx
  add    $0x1,%r15
  mov    %ecx,0x1c(%rsp)
  cmp    %r15d,0x18(%rsp)
  jge    L188
  mov    %rbp,%rcx
  mov    %eax,%ebx
  mov    %r13d,%ebp
  mov    %rcx,%r13
  jmp    L106
L416:
  mov    %ebx,%eax
L188:
  mov    0x1c(%rsp),%ebx
  jmp    L404
L579:
  mov    %r14,%r15
  jmp    L679
L380:
  mov    %r15,%r14
L840:
  mov    0x48(%rsp),%ecx
  cmp    %ecx,0x34(%rsp)
  jl     L272
  mov    %ecx,%r15d
  jmp    L721
L462:
  mov    %eax,0x48(%rsp)
  mov    0x14(%rsp),%r13d
  mov    %r12d,%ebp
  jmp    L448
L341:
  mov    %r14d,%r13d
  mov    %eax,0x44(%rsp)
  mov    0x14(%rsp),%r14d
  mov    %r12d,%ebp
  jmp    L433
L589:
  add    $0x68,%rsp
  mov    %r15d,%eax
  mov    %r14,%rdi
  pop    %rbx
  mov    %eax,%edx
  pop    %rbp
  mov    %eax,%esi
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1050 <swap@plt>
L65:
  mov    %r13,%rcx
  mov    %ebx,%r13d
  mov    %r14,%rbx
  nopl   (%rax)
L709:
  mov    (%rbx,%rcx,4),%r8d
  mov    %ebp,%r14d
  cmp    %ebp,%r13d
  jge    L11
  mov    %r12d,%edx
  mov    %r12d,%esi
  mov    %rbx,%rdi
  mov    %rbx,%r14
  call   <swap@plt>
  jmp    L671
L11:
  movslq %ebp,%r15
  mov    %r12d,%eax
L451:
  mov    %r15d,%esi
  cmp    (%rbx,%r15,4),%r8d
  jle    L192
  mov    %r14d,%edx
  mov    %rbx,%rdi
  add    $0x1,%r15
  mov    %rcx,0x50(%rsp)
  mov    %r8d,0x38(%rsp)
  call   <swap@plt>
  lea    0x1(%r14),%eax
  cmp    %r15d,%r13d
  mov    0x38(%rsp),%r8d
  mov    %eax,0x14(%rsp)
  mov    0x50(%rsp),%rcx
  jge    L611
L771:
  mov    %r14d,%edx
  mov    %r12d,%esi
  mov    %rbx,%rdi
  mov    %rcx,0x38(%rsp)
  call   <swap@plt>
  lea    -0x1(%r14),%r15d
  mov    0x38(%rsp),%rcx
  cmp    %r12d,%r15d
  jge    L665
  nopw   0x0(%rax,%rax,1)
L305:
  cmp    0x14(%rsp),%r13d
  jl     L400
  movslq 0x14(%rsp),%rcx
  mov    %rcx,%r12
  lea    0x1(%rcx),%ebp
  jmp    L709
L192:
  add    $0x1,%r15
  lea    0x1(%rax),%r14d
  cmp    %r15d,%r13d
  jge    L451
  mov    %r14d,0x14(%rsp)
  mov    %eax,%r14d
  jmp    L771
L611:
  mov    %r14d,%eax
  mov    0x14(%rsp),%r14d
  jmp    L451
L400:
  mov    %rbx,%r14
  jmp    L671
L665:
  mov    %r13d,0x38(%rsp)
  mov    %r15d,%r13d
  mov    %rbx,%r15
  nopw   0x0(%rax,%rax,1)
L428:
  mov    (%r15,%rcx,4),%ecx
  mov    %ebp,%edx
  cmp    %ebp,%r13d
  jge    L103
  mov    %r12d,%edx
  mov    %r12d,%esi
  mov    %r15,%rdi
  mov    0x38(%rsp),%r13d
  call   <swap@plt>
  lea    -0x1(%r12),%edx
  mov    %r12d,%esi
  mov    %r15,%rdi
  mov    %r15,%rbx
  call   <quick>
  jmp    L305
L103:
  movslq %ebp,%r14
  mov    %r12d,%ebp
L167:
  mov    %r14d,%esi
  cmp    (%r15,%r14,4),%ecx
  jle    L502
  mov    %r15,%rdi
  mov    %ecx,0x5c(%rsp)
  add    $0x1,%r14
  mov    %edx,0x50(%rsp)
  call   <swap@plt>
  mov    0x50(%rsp),%edx
  cmp    %r14d,%r13d
  mov    0x5c(%rsp),%ecx
  lea    0x1(%rdx),%ebx
  mov    %edx,%ebp
  jge    L626
L0:
  mov    %ebp,%edx
  mov    %r12d,%esi
  mov    %r15,%rdi
  call   <swap@plt>
  lea    -0x1(%rbp),%edx
  mov    %r12d,%esi
  mov    %r15,%rdi
  call   <quick>
  cmp    %ebx,%r13d
  jl     L691
  movslq %ebx,%rcx
  mov    %rcx,%r12
  lea    0x1(%rcx),%ebp
  jmp    L428
L502:
  add    $0x1,%r14
  lea    0x1(%rbp),%ebx
  cmp    %r14d,%r13d
  jl     L0
L626:
  mov    %ebx,%edx
  jmp    L167
L691:
  mov    0x38(%rsp),%r13d
  mov    %r15,%rbx
  jmp    L305
```

assistant: ```c
void quick(int a[], int low, int high) {
  if (low <= high) {
    int temp = a[low];
    int p = low;
    for (int i = low; i <= high; i++) {
      if (a[i] < temp) {
        p++;
        swap(a, i, p);
      }
    }
    swap(a, low, p);
    quick(a, low, p - 1);
    quick(a, p + 1, high);
  }
}
```