user: 这段汇编代码用C语言表示是什么样的:

```asm
<sort>:
  endbr64
  mov    %rsi,%rax
  push   %r15
  sub    %rdi,%rax
  push   %r14
  mov    %rax,%rdx
  push   %r13
  shr    $0x3f,%rax
  push   %r12
  sar    $0x2,%rdx
  push   %rbp
  add    %rdx,%rax
  push   %rbx
  sar    %rax
  lea    (%rdi,%rax,4),%rax
  sub    $0x88,%rsp
  mov    %rsi,0x28(%rsp)
  cmp    %rdi,%rsi
  jb     L436
  mov    (%rax),%r12d
  mov    %rdi,%r13
  mov    %rsi,%rax
L65:
  mov    %rax,%rdx
  mov    (%rax),%eax
  mov    %r13,%rbx
L178:
  cmp    %r12d,(%rbx)
  jl     L44
  cmp    %eax,%r12d
  jge    L164
L336:
  sub    $0x4,%rdx
  cmp    %r12d,(%rdx)
  jg     L336
L164:
  cmp    %rdx,%rbx
  jae    L618
  lea    -0x4(%rdx),%rbp
  mov    %edx,%esi
  mov    %ebx,%edi
  call   <swap@plt>
  mov    0x0(%rbp),%eax
  mov    %rbp,%rdx
L44:
  add    $0x4,%rbx
  jmp    L178
L436:
  add    $0x88,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L618:
  lea    -0x4(%rbx),%rdi
  mov    %rdx,0x30(%rsp)
  mov    %rdi,%rax
  mov    %rdi,(%rsp)
  sub    %r13,%rax
  mov    %rax,%rdx
  shr    $0x3f,%rax
  sar    $0x2,%rdx
  add    %rdx,%rax
  sar    %rax
  lea    0x0(%r13,%rax,4),%rax
  cmp    %r13,%rdi
  jb     L517
  mov    (%rax),%r12d
  mov    %rdi,%rax
L19:
  mov    %rax,%rdx
  mov    (%rax),%eax
  mov    %r13,%rbx
L638:
  cmp    %r12d,(%rbx)
  jl     L690
  cmp    %eax,%r12d
  jge    L236
L155:
  sub    $0x4,%rdx
  cmp    %r12d,(%rdx)
  jg     L155
L236:
  cmp    %rdx,%rbx
  jae    L383
  lea    -0x4(%rdx),%rbp
  mov    %edx,%esi
  mov    %ebx,%edi
  call   <swap@plt>
  mov    0x0(%rbp),%eax
  mov    %rbp,%rdx
L690:
  add    $0x4,%rbx
  jmp    L638
L517:
  mov    0x30(%rsp),%r13
  mov    0x28(%rsp),%rsi
  add    $0x4,%r13
  mov    %rsi,%rax
  sub    %r13,%rax
  mov    %rax,%rdx
  shr    $0x3f,%rax
  sar    $0x2,%rdx
  add    %rdx,%rax
  sar    %rax
  lea    0x0(%r13,%rax,4),%rax
  cmp    %rsi,%r13
  ja     L436
  mov    (%rax),%r12d
  mov    %rsi,%rax
  jmp    L65
L383:
  lea    -0x4(%rbx),%rcx
  mov    %rdx,0x38(%rsp)
  mov    %rcx,%rax
  mov    %rcx,0x8(%rsp)
  sub    %r13,%rax
  mov    %rax,%rdx
  shr    $0x3f,%rax
  sar    $0x2,%rdx
  add    %rdx,%rax
  sar    %rax
  lea    0x0(%r13,%rax,4),%rax
  cmp    %r13,%rcx
  jb     L61
  mov    (%rax),%r12d
  mov    %rcx,%rax
L601:
  mov    %rax,%rdx
  mov    (%rax),%eax
  mov    %r13,%rbx
L47:
  cmp    %r12d,(%rbx)
  jl     L190
  cmp    %eax,%r12d
  jge    L113
L214:
  sub    $0x4,%rdx
  cmp    %r12d,(%rdx)
  jg     L214
L113:
  cmp    %rdx,%rbx
  jae    L375
  lea    -0x4(%rdx),%rbp
  mov    %edx,%esi
  mov    %ebx,%edi
  call   <swap@plt>
  mov    0x0(%rbp),%eax
  mov    %rbp,%rdx
L190:
  add    $0x4,%rbx
  jmp    L47
L61:
  mov    0x38(%rsp),%r13
  mov    (%rsp),%rsi
  add    $0x4,%r13
  mov    %rsi,%rax
  sub    %r13,%rax
  mov    %rax,%rdx
  shr    $0x3f,%rax
  sar    $0x2,%rdx
  add    %rdx,%rax
  sar    %rax
  lea    0x0(%r13,%rax,4),%rax
  cmp    %r13,%rsi
  jb     L517
  mov    (%rax),%r12d
  mov    %rsi,%rax
  jmp    L19
L375:
  lea    -0x4(%rbx),%rsi
  mov    %rdx,0x40(%rsp)
  mov    %rsi,%rax
  mov    %rsi,0x10(%rsp)
  sub    %r13,%rax
  mov    %rax,%rdx
  shr    $0x3f,%rax
  sar    $0x2,%rdx
  add    %rdx,%rax
  sar    %rax
  lea    0x0(%r13,%rax,4),%rax
  cmp    %r13,%rsi
  jb     L165
  mov    (%rax),%r12d
  mov    %rsi,%rax
L664:
  mov    %rax,%rdx
  mov    (%rax),%eax
  mov    %r13,%rbx
L684:
  cmp    %r12d,(%rbx)
  jl     L347
  cmp    %eax,%r12d
  jge    L76
L171:
  sub    $0x4,%rdx
  cmp    %r12d,(%rdx)
  jg     L171
L76:
  cmp    %rdx,%rbx
  jae    L466
  lea    -0x4(%rdx),%rbp
  mov    %edx,%esi
  mov    %ebx,%edi
  call   <swap@plt>
  mov    0x0(%rbp),%eax
  mov    %rbp,%rdx
L347:
  add    $0x4,%rbx
  jmp    L684
L165:
  mov    0x40(%rsp),%r13
  mov    0x8(%rsp),%rdi
  add    $0x4,%r13
  mov    %rdi,%rax
  sub    %r13,%rax
  mov    %rax,%rdx
  shr    $0x3f,%rax
  sar    $0x2,%rdx
  add    %rdx,%rax
  sar    %rax
  lea    0x0(%r13,%rax,4),%rax
  cmp    %r13,%rdi
  jb     L61
  mov    (%rax),%r12d
  mov    %rdi,%rax
  jmp    L601
L466:
  lea    -0x4(%rbx),%rdi
  mov    %rdx,0x48(%rsp)
  mov    %rdi,%rax
  mov    %rdi,0x18(%rsp)
  sub    %r13,%rax
  mov    %rax,%rdx
  shr    $0x3f,%rax
  sar    $0x2,%rdx
  add    %rdx,%rax
  sar    %rax
  lea    0x0(%r13,%rax,4),%rax
  cmp    %r13,%rdi
  jb     L161
  mov    (%rax),%ebp
  mov    %rdi,%rax
L346:
  mov    %rax,%r14
  mov    (%rax),%eax
  mov    %r13,%r12
L438:
  cmp    %ebp,(%r12)
  jl     L148
  cmp    %eax,%ebp
  jge    L632
L239:
  sub    $0x4,%r14
  cmp    %ebp,(%r14)
  jg     L239
L632:
  cmp    %r14,%r12
  jae    L660
  lea    -0x4(%r14),%rbx
  mov    %r14d,%esi
  mov    %r12d,%edi
  call   <swap@plt>
  mov    (%rbx),%eax
  mov    %rbx,%r14
L148:
  add    $0x4,%r12
  jmp    L438
L660:
  lea    -0x4(%r12),%rcx
  mov    %rcx,%rax
  mov    %rcx,0x20(%rsp)
  sub    %r13,%rax
  mov    %rax,%rdx
  shr    $0x3f,%rax
  sar    $0x2,%rdx
  add    %rdx,%rax
  sar    %rax
  lea    0x0(%r13,%rax,4),%rax
  cmp    %r13,%rcx
  jb     L355
  mov    %r14,0x58(%rsp)
  mov    (%rax),%r15d
  mov    %rcx,%rax
L622:
  mov    %rax,%r14
  mov    (%rax),%eax
  mov    %r13,%rbp
L354:
  cmp    %r15d,0x0(%rbp)
  jl     L445
  cmp    %eax,%r15d
  jge    L258
  nop
L75:
  sub    $0x4,%r14
  cmp    %r15d,(%r14)
  jg     L75
L258:
  cmp    %r14,%rbp
  jae    L629
  lea    -0x4(%r14),%rbx
  mov    %r14d,%esi
  mov    %ebp,%edi
  call   <swap@plt>
  mov    (%rbx),%eax
  mov    %rbx,%r14
L445:
  add    $0x4,%rbp
  jmp    L354
L629:
  sub    $0x4,%rbp
  mov    %rbp,%rax
  sub    %r13,%rax
  mov    %rax,%rcx
  shr    $0x3f,%rax
  sar    $0x2,%rcx
  add    %rcx,%rax
  sar    %rax
  lea    0x0(%r13,%rax,4),%rax
  cmp    %r13,%rbp
  jb     L509
  mov    (%rax),%r12d
  mov    %r14,0x60(%rsp)
  mov    %r12d,%r14d
L153:
  mov    0x0(%rbp),%eax
  mov    %r13,%r15
  mov    %rbp,%rbx
  nopl   0x0(%rax)
L322:
  cmp    %r14d,(%r15)
  jl     L714
  cmp    %eax,%r14d
  jge    L152
  nopw   0x0(%rax,%rax,1)
L669:
  sub    $0x4,%rbx
  cmp    %r14d,(%rbx)
  jg     L669
L152:
  cmp    %rbx,%r15
  jae    L704
  lea    -0x4(%rbx),%r12
  mov    %ebx,%esi
  mov    %r15d,%edi
  call   <swap@plt>
  mov    (%r12),%eax
  mov    %r12,%rbx
L714:
  add    $0x4,%r15
  jmp    L322
L704:
  lea    -0x4(%r15),%r12
  mov    %r12,%rax
  sub    %r13,%rax
  mov    %rax,%rdx
  shr    $0x3f,%rax
  sar    $0x2,%rdx
  add    %rdx,%rax
  sar    %rax
  lea    0x0(%r13,%rax,4),%rax
  cmp    %r13,%r12
  jb     L193
  mov    (%rax),%r14d
  mov    %rbx,0x68(%rsp)
  mov    %r14d,%r15d
L578:
  mov    (%r12),%eax
  mov    %r13,%r14
  mov    %r12,%rbx
  nop
L584:
  cmp    %r15d,(%r14)
  jl     L142
  cmp    %eax,%r15d
  jge    L112
  nopw   0x0(%rax,%rax,1)
L451:
  sub    $0x4,%rbx
  cmp    %r15d,(%rbx)
  jg     L451
L112:
  cmp    %rbx,%r14
  jae    L311
  lea    -0x4(%rbx),%rax
  mov    %ebx,%esi
  mov    %r14d,%edi
  mov    %rax,0x50(%rsp)
  call   <swap@plt>
  mov    0x50(%rsp),%rbx
  mov    (%rbx),%eax
L142:
  add    $0x4,%r14
  jmp    L584
L311:
  sub    $0x4,%r14
  mov    %r14,%rax
  sub    %r13,%rax
  mov    %rax,%rcx
  shr    $0x3f,%rax
  sar    $0x2,%rcx
  add    %rcx,%rax
  sar    %rax
  lea    0x0(%r13,%rax,4),%rax
  cmp    %r13,%r14
  jb     L324
  mov    (%rax),%r15d
  mov    %r12,%rcx
  mov    %rbx,%r8
  mov    %r14,%r12
  mov    %rbp,%rbx
  mov    %r13,%rbp
L251:
  mov    %rbp,%r13
  mov    (%r12),%eax
  mov    %r12,%r14
  mov    %rbx,%rbp
  mov    %r12,%rbx
  mov    %rcx,%r12
  mov    %r13,%rcx
  nop
L534:
  cmp    %r15d,0x0(%r13)
  jl     L531
  cmp    %eax,%r15d
  jge    L169
  nopl   0x0(%rax,%rax,1)
L226:
  sub    $0x4,%r14
  cmp    %r15d,(%r14)
  jg     L226
L169:
  cmp    %r14,%r13
  jae    L242
  lea    -0x4(%r14),%rax
  mov    %r14d,%esi
  mov    %r13d,%edi
  mov    %rcx,0x78(%rsp)
  mov    %r8,0x70(%rsp)
  mov    %rax,0x50(%rsp)
  call   <swap@plt>
  mov    0x50(%rsp),%r14
  mov    0x70(%rsp),%r8
  mov    0x78(%rsp),%rcx
  mov    (%r14),%eax
L531:
  add    $0x4,%r13
  jmp    L534
L63:
  mov    %rbx,%rbp
  mov    %rcx,%r12
  mov    %r8,%rbx
L324:
  lea    0x4(%rbx),%r13
  mov    %r12,%rax
  sub    %r13,%rax
  mov    %rax,%rdx
  shr    $0x3f,%rax
  sar    $0x2,%rdx
  add    %rdx,%rax
  sar    %rax
  lea    0x0(%r13,%rax,4),%rax
  cmp    %r13,%r12
  jb     L608
  mov    (%rax),%r15d
  jmp    L578
  nopw   0x0(%rax,%rax,1)
L242:
  mov    %r12,0x50(%rsp)
  lea    -0x4(%r13),%rsi
  mov    %rbx,%r12
  mov    %rcx,%rdi
  mov    %r8,0x70(%rsp)
  mov    %rbp,%rbx
  lea    0x4(%r14),%rbp
  call   <sort>
  mov    %r12,%rax
  mov    0x50(%rsp),%rcx
  mov    0x70(%rsp),%r8
  sub    %rbp,%rax
  mov    %rax,%rsi
  shr    $0x3f,%rax
  sar    $0x2,%rsi
  add    %rsi,%rax
  sar    %rax
  cmp    %rbp,%r12
  lea    0x0(%rbp,%rax,4),%rax
  jb     L63
  mov    (%rax),%r15d
  jmp    L251
L608:
  mov    0x68(%rsp),%rbx
L193:
  lea    0x4(%rbx),%r13
  mov    %rbp,%rax
  sub    %r13,%rax
  mov    %rax,%rdx
  shr    $0x3f,%rax
  sar    $0x2,%rdx
  add    %rdx,%rax
  sar    %rax
  lea    0x0(%r13,%rax,4),%rax
  cmp    %r13,%rbp
  jb     L609
  mov    (%rax),%r14d
  jmp    L153
L609:
  mov    0x60(%rsp),%r14
L509:
  mov    0x20(%rsp),%rdi
  lea    0x4(%r14),%r13
  mov    %rdi,%rax
  sub    %r13,%rax
  mov    %rax,%rdx
  shr    $0x3f,%rax
  sar    $0x2,%rdx
  add    %rdx,%rax
  sar    %rax
  lea    0x0(%r13,%rax,4),%rax
  cmp    %r13,%rdi
  jb     L259
  mov    (%rax),%r15d
  mov    %rdi,%rax
  jmp    L622
L259:
  mov    0x58(%rsp),%r14
L355:
  mov    0x18(%rsp),%rsi
  lea    0x4(%r14),%r13
  mov    %rsi,%rax
  sub    %r13,%rax
  mov    %rax,%rdx
  shr    $0x3f,%rax
  sar    $0x2,%rdx
  add    %rdx,%rax
  sar    %rax
  lea    0x0(%r13,%rax,4),%rax
  cmp    %r13,%rsi
  jb     L161
  mov    (%rax),%ebp
  mov    %rsi,%rax
  jmp    L346
L161:
  mov    0x48(%rsp),%r13
  mov    0x10(%rsp),%rcx
  add    $0x4,%r13
  mov    %rcx,%rax
  sub    %r13,%rax
  mov    %rax,%rdx
  shr    $0x3f,%rax
  sar    $0x2,%rdx
  add    %rdx,%rax
  sar    %rax
  lea    0x0(%r13,%rax,4),%rax
  cmp    %r13,%rcx
  jb     L165
  mov    (%rax),%r12d
  mov    %rcx,%rax
  jmp    L664
```

assistant: ```c
void sort(int *first, int *last) {
  int *f = first;
  int *l = last;
  int p = *(first + (last - first) / 2);
  if (first > last)
    return;
  for (;;) {
    while (*f < p)
      f++;
    while (p < *l)
      l--;
    if (f >= l)
      break;
    swap(f++, l--);
  }
  sort(first, f - 1);
  sort(l + 1, last);
}
```