user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<sort_me>:
  endbr64
  push   %r15
  mov    %rdi,%r9
  mov    %edx,%ecx
  push   %r14
  mov    %esi,%r14d
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x48,%rsp
  mov    %edx,0x38(%rsp)
L802:
  mov    %r14d,%edx
  mov    %r14d,%r10d
  mov    %ecx,%r11d
  add    %ecx,%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  sar    %eax
  cltq
  movzbl (%r9,%rax,1),%edx
L976:
  cmp    %r11d,%r10d
  jg     L447
L354:
  movslq %r10d,%rax
  movslq %r11d,%rbp
  lea    (%r9,%rax,1),%r8
  lea    (%r9,%rbp,1),%rcx
  movzbl (%r8),%edi
  movzbl (%rcx),%esi
  cmp    %dil,%dl
  jle    L497
  lea    0x1(%r9,%rax,1),%rax
  lea    0x1(%r10),%ebx
  sub    %eax,%ebx
  nopl   0x0(%rax,%rax,1)
L962:
  lea    (%rbx,%rax,1),%r10d
  mov    %rax,%r8
  movzbl (%rax),%edi
  lea    0x1(%rax),%rax
  cmp    %dil,%dl
  jg     L962
  cmp    %sil,%dl
  jge    L378
L808:
  lea    -0x1(%r9,%rbp,1),%rax
  lea    -0x1(%r11),%ebx
  sub    %eax,%ebx
  nopl   0x0(%rax,%rax,1)
L422:
  lea    (%rbx,%rax,1),%r11d
  mov    %rax,%rcx
  movzbl (%rax),%esi
  lea    -0x1(%rax),%rax
  cmp    %sil,%dl
  jl     L422
L378:
  cmp    %r10d,%r11d
  jl     L976
  mov    %sil,(%r8)
  sub    $0x1,%r11d
  add    $0x1,%r10d
  mov    %dil,(%rcx)
L944:
  cmp    %r11d,%r10d
  jle    L354
L447:
  mov    %r10d,0x10(%rsp)
  mov    %r11d,0x14(%rsp)
  cmp    %r14d,%r11d
  jg     L214
L529:
  mov    0x38(%rsp),%ebx
  cmp    %ebx,0x10(%rsp)
  jge    L1010
  mov    0x10(%rsp),%r14d
  mov    %ebx,%ecx
  jmp    L802
L497:
  cmp    %sil,%dl
  jl     L808
  mov    %sil,(%r8)
  sub    $0x1,%r11d
  add    $0x1,%r10d
  mov    %dil,(%rcx)
  jmp    L944
L107:
  mov    %ecx,0x18(%rsp)
  mov    %esi,0x1c(%rsp)
  cmp    %ecx,%r14d
  jl     L1009
L739:
  mov    0x1c(%rsp),%ebx
  cmp    %ebx,0x14(%rsp)
  jle    L529
  mov    %ebx,%r14d
L214:
  mov    0x14(%rsp),%ebx
  mov    %r14d,%esi
  mov    %ebx,%edx
  mov    %ebx,%ecx
  add    %r14d,%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  sar    %eax
  cltq
  movzbl (%r9,%rax,1),%edx
L382:
  cmp    %ecx,%esi
  jg     L107
  movslq %esi,%rax
  movslq %ecx,%rbx
  lea    (%r9,%rax,1),%r10
  lea    (%r9,%rbx,1),%r11
  movzbl (%r10),%r8d
  movzbl (%r11),%edi
  lea    0x1(%r9,%rax,1),%rax
  cmp    %r8b,%dl
  jle    L264
  nopl   (%rax)
L527:
  mov    %rax,%r10
  movzbl (%rax),%r8d
  lea    0x1(%rax),%rax
  add    $0x1,%esi
  cmp    %r8b,%dl
  jg     L527
  cmp    %dil,%dl
  jge    L959
L514:
  lea    -0x1(%r9,%rbx,1),%rax
  nopl   (%rax)
L790:
  mov    %rax,%r11
  movzbl (%rax),%edi
  sub    $0x1,%rax
  sub    $0x1,%ecx
  cmp    %dil,%dl
  jl     L790
L959:
  cmp    %esi,%ecx
  jl     L382
  mov    %dil,(%r10)
  sub    $0x1,%ecx
  add    $0x1,%esi
  mov    %r8b,(%r11)
  jmp    L382
L264:
  cmp    %dil,%dl
  jl     L514
  mov    %dil,(%r10)
  sub    $0x1,%ecx
  add    $0x1,%esi
  mov    %r8b,(%r11)
  jmp    L382
L992:
  mov    %ecx,0x20(%rsp)
  mov    %esi,0x24(%rsp)
  cmp    %ecx,%r14d
  jl     L15
L224:
  mov    0x24(%rsp),%ebx
  cmp    %ebx,0x18(%rsp)
  jle    L739
  mov    %ebx,%r14d
L1009:
  mov    0x18(%rsp),%ebx
  mov    %r14d,%esi
  mov    %ebx,%edx
  mov    %ebx,%ecx
  add    %r14d,%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  sar    %eax
  cltq
  movzbl (%r9,%rax,1),%edx
  nop
L50:
  cmp    %ecx,%esi
  jg     L992
  movslq %esi,%rax
  movslq %ecx,%rbx
  lea    (%r9,%rax,1),%r10
  lea    (%r9,%rbx,1),%r11
  movzbl (%r10),%r8d
  movzbl (%r11),%edi
  lea    0x1(%r9,%rax,1),%rax
  cmp    %r8b,%dl
  jle    L590
  nopl   0x0(%rax)
L552:
  mov    %rax,%r10
  movzbl (%rax),%r8d
  lea    0x1(%rax),%rax
  add    $0x1,%esi
  cmp    %r8b,%dl
  jg     L552
  cmp    %dil,%dl
  jge    L16
L251:
  lea    -0x1(%r9,%rbx,1),%rax
  nopl   (%rax)
L521:
  mov    %rax,%r11
  movzbl (%rax),%edi
  sub    $0x1,%rax
  sub    $0x1,%ecx
  cmp    %dil,%dl
  jl     L521
L16:
  cmp    %esi,%ecx
  jl     L50
  mov    %dil,(%r10)
  sub    $0x1,%ecx
  add    $0x1,%esi
  mov    %r8b,(%r11)
  jmp    L50
L590:
  cmp    %dil,%dl
  jl     L251
  mov    %dil,(%r10)
  sub    $0x1,%ecx
  add    $0x1,%esi
  mov    %r8b,(%r11)
  jmp    L50
L381:
  mov    %edx,0x28(%rsp)
  mov    %ecx,0x2c(%rsp)
  cmp    %edx,%r14d
  jl     L183
L698:
  mov    0x2c(%rsp),%ebx
  cmp    %ebx,0x20(%rsp)
  jle    L224
  mov    %ebx,%r14d
L15:
  mov    0x20(%rsp),%ebx
  mov    %r14d,%ecx
  mov    %ebx,%edx
  add    %r14d,%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  mov    %ebx,%edx
  sar    %eax
  cltq
  movzbl (%r9,%rax,1),%esi
  nop
L210:
  cmp    %edx,%ecx
  jg     L381
  movslq %ecx,%rax
  movslq %edx,%rbx
  lea    (%r9,%rax,1),%rdi
  lea    (%r9,%rbx,1),%r11
  movzbl (%rdi),%r8d
  movzbl (%r11),%r10d
  lea    0x1(%r9,%rax,1),%rax
  cmp    %r8b,%sil
  jle    L77
  nopl   0x0(%rax)
L990:
  mov    %rax,%rdi
  movzbl (%rax),%r8d
  lea    0x1(%rax),%rax
  add    $0x1,%ecx
  cmp    %r8b,%sil
  jg     L990
  cmp    %r10b,%sil
  jge    L644
L608:
  lea    -0x1(%r9,%rbx,1),%rax
  nopl   (%rax)
L449:
  mov    %rax,%r11
  movzbl (%rax),%r10d
  sub    $0x1,%rax
  sub    $0x1,%edx
  cmp    %r10b,%sil
  jl     L449
L644:
  cmp    %ecx,%edx
  jl     L210
  mov    %r10b,(%rdi)
  sub    $0x1,%edx
  add    $0x1,%ecx
  mov    %r8b,(%r11)
  jmp    L210
L77:
  cmp    %r10b,%sil
  jl     L608
  mov    %r10b,(%rdi)
  sub    $0x1,%edx
  add    $0x1,%ecx
  mov    %r8b,(%r11)
  jmp    L210
L183:
  mov    %r9,%r11
L36:
  mov    0x28(%rsp),%ebx
  mov    %r14d,%esi
  mov    %ebx,%edx
  mov    %ebx,%ecx
  add    %r14d,%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  sar    %eax
  cltq
  movzbl (%r11,%rax,1),%edx
  nopl   0x0(%rax)
L439:
  cmp    %ecx,%esi
  jg     L448
L730:
  movslq %esi,%rax
  movslq %ecx,%rbx
  lea    (%r11,%rax,1),%r8
  lea    (%r11,%rbx,1),%r10
  movzbl (%r8),%r9d
  movzbl (%r10),%edi
  lea    0x1(%r11,%rax,1),%rax
  cmp    %dl,%r9b
  jge    L544
  nopl   0x0(%rax)
L401:
  mov    %rax,%r8
  movzbl (%rax),%r9d
  lea    0x1(%rax),%rax
  add    $0x1,%esi
  cmp    %r9b,%dl
  jg     L401
  cmp    %dil,%dl
  jge    L411
L1023:
  lea    -0x1(%r11,%rbx,1),%rax
  nopl   (%rax)
L671:
  mov    %rax,%r10
  movzbl (%rax),%edi
  sub    $0x1,%rax
  sub    $0x1,%ecx
  cmp    %dil,%dl
  jl     L671
L411:
  cmp    %esi,%ecx
  jl     L439
  mov    %dil,(%r8)
  sub    $0x1,%ecx
  add    $0x1,%esi
  mov    %r9b,(%r10)
L633:
  cmp    %ecx,%esi
  jle    L730
L448:
  mov    %ecx,0x30(%rsp)
  mov    %esi,0x34(%rsp)
  cmp    %ecx,%r14d
  jl     L424
L372:
  mov    0x34(%rsp),%ebx
  cmp    %ebx,0x28(%rsp)
  jle    L756
  mov    %ebx,%r14d
  jmp    L36
L544:
  cmp    %dil,%dl
  jl     L1023
  mov    %dil,(%r8)
  sub    $0x1,%ecx
  add    $0x1,%esi
  mov    %r9b,(%r10)
  jmp    L633
L946:
  cmp    %r15d,%r14d
  jl     L562
L626:
  cmp    %r10d,0x30(%rsp)
  jle    L372
  mov    %r10d,%r14d
L424:
  mov    0x30(%rsp),%r15d
  mov    %r14d,%r10d
  mov    %r15d,%edx
  add    %r14d,%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  sar    %eax
  cltq
  movzbl (%r11,%rax,1),%edx
  nopl   (%rax)
L575:
  cmp    %r15d,%r10d
  jg     L946
  movslq %r10d,%rax
  movslq %r15d,%r9
  lea    (%r11,%rax,1),%rdi
  lea    (%r11,%r9,1),%r8
  movzbl (%rdi),%esi
  movzbl (%r8),%ecx
  lea    0x1(%r11,%rax,1),%rax
  cmp    %dl,%sil
  jge    L776
  nopl   0x0(%rax)
L82:
  mov    %rax,%rdi
  movzbl (%rax),%esi
  lea    0x1(%rax),%rax
  add    $0x1,%r10d
  cmp    %sil,%dl
  jg     L82
  cmp    %cl,%dl
  jge    L23
L387:
  lea    -0x1(%r11,%r9,1),%rax
  nopl   0x0(%rax)
L37:
  mov    %rax,%r8
  movzbl (%rax),%ecx
  sub    $0x1,%rax
  sub    $0x1,%r15d
  cmp    %cl,%dl
  jl     L37
L23:
  cmp    %r10d,%r15d
  jl     L575
  mov    %cl,(%rdi)
  sub    $0x1,%r15d
  add    $0x1,%r10d
  mov    %sil,(%r8)
  jmp    L575
L776:
  cmp    %cl,%dl
  jl     L387
  mov    %cl,(%rdi)
  sub    $0x1,%r15d
  add    $0x1,%r10d
  mov    %sil,(%r8)
  jmp    L575
L562:
  mov    %r10d,0x3c(%rsp)
  mov    %r15d,0xc(%rsp)
  mov    %r11,%r15
L245:
  mov    0xc(%rsp),%r13d
  mov    %r14d,%r10d
  lea    0x0(%r13,%r14,1),%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  sar    %eax
  cltq
  movzbl (%r15,%rax,1),%edx
  xchg   %ax,%ax
L445:
  cmp    %r13d,%r14d
  jg     L289
L55:
  movslq %r14d,%rax
  movslq %r13d,%r9
  lea    (%r15,%rax,1),%rdi
  lea    (%r15,%r9,1),%r8
  movzbl (%rdi),%esi
  movzbl (%r8),%ecx
  lea    0x1(%r15,%rax,1),%rax
  cmp    %dl,%sil
  jge    L573
  nopl   0x0(%rax)
L203:
  mov    %rax,%rdi
  movzbl (%rax),%esi
  lea    0x1(%rax),%rax
  add    $0x1,%r14d
  cmp    %sil,%dl
  jg     L203
  cmp    %cl,%dl
  jge    L499
L695:
  lea    -0x1(%r15,%r9,1),%rax
  nopl   0x0(%rax)
L419:
  mov    %rax,%r8
  movzbl (%rax),%ecx
  sub    $0x1,%rax
  sub    $0x1,%r13d
  cmp    %cl,%dl
  jl     L419
L499:
  cmp    %r14d,%r13d
  jl     L445
  mov    %cl,(%rdi)
  sub    $0x1,%r13d
  add    $0x1,%r14d
  mov    %sil,(%r8)
L651:
  cmp    %r13d,%r14d
  jle    L55
L289:
  cmp    %r13d,%r10d
  jl     L517
L262:
  cmp    %r14d,0xc(%rsp)
  jg     L245
  mov    0x3c(%rsp),%r10d
  mov    %r15,%r11
  jmp    L626
L573:
  cmp    %cl,%dl
  jl     L695
  mov    %cl,(%rdi)
  sub    $0x1,%r13d
  add    $0x1,%r14d
  mov    %sil,(%r8)
  jmp    L651
L17:
  cmp    %ebp,%r10d
  jl     L1038
L979:
  cmp    %r12d,%r13d
  jle    L262
  mov    %r12d,%r10d
L517:
  lea    0x0(%r13,%r10,1),%edx
  mov    %r13d,%ebp
  mov    %r10d,%r12d
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  sar    %eax
  cltq
  movzbl (%r15,%rax,1),%edx
  nopl   (%rax)
L569:
  cmp    %ebp,%r12d
  jg     L17
  movslq %r12d,%rax
  movslq %ebp,%r9
  lea    (%r15,%rax,1),%rdi
  lea    (%r15,%r9,1),%r8
  movzbl (%rdi),%esi
  movzbl (%r8),%ecx
  lea    0x1(%r15,%rax,1),%rax
  cmp    %dl,%sil
  jge    L804
  nopl   0x0(%rax)
L215:
  mov    %rax,%rdi
  movzbl (%rax),%esi
  lea    0x1(%rax),%rax
  add    $0x1,%r12d
  cmp    %sil,%dl
  jg     L215
  cmp    %cl,%dl
  jge    L99
L469:
  lea    -0x1(%r15,%r9,1),%rax
  nopl   0x0(%rax)
L211:
  mov    %rax,%r8
  movzbl (%rax),%ecx
  sub    $0x1,%rax
  sub    $0x1,%ebp
  cmp    %cl,%dl
  jl     L211
L99:
  cmp    %r12d,%ebp
  jl     L569
  mov    %cl,(%rdi)
  sub    $0x1,%ebp
  add    $0x1,%r12d
  mov    %sil,(%r8)
  jmp    L569
L804:
  cmp    %cl,%dl
  jl     L469
  mov    %cl,(%rdi)
  sub    $0x1,%ebp
  add    $0x1,%r12d
  mov    %sil,(%r8)
  jmp    L569
L932:
  cmp    %edx,%r10d
  jl     L181
L767:
  cmp    %ebx,%ebp
  jle    L979
  mov    %ebx,%r10d
L1038:
  lea    0x0(%rbp,%r10,1),%edx
  mov    %r10d,%ebx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  mov    %ebp,%edx
  sar    %eax
  cltq
  movzbl (%r15,%rax,1),%edi
  nopl   0x0(%rax)
L1018:
  cmp    %edx,%ebx
  jg     L932
  movslq %ebx,%rax
  movslq %edx,%r11
  lea    (%r15,%rax,1),%rsi
  lea    (%r15,%r11,1),%r9
  movzbl (%rsi),%ecx
  movzbl (%r9),%r8d
  lea    0x1(%r15,%rax,1),%rax
  cmp    %cl,%dil
  jle    L385
  nopl   0x0(%rax,%rax,1)
L345:
  mov    %rax,%rsi
  movzbl (%rax),%ecx
  lea    0x1(%rax),%rax
  add    $0x1,%ebx
  cmp    %cl,%dil
  jg     L345
  cmp    %r8b,%dil
  jge    L369
L335:
  lea    -0x1(%r15,%r11,1),%rax
  nopl   0x0(%rax)
L939:
  mov    %rax,%r9
  movzbl (%rax),%r8d
  sub    $0x1,%rax
  sub    $0x1,%edx
  cmp    %r8b,%dil
  jl     L939
L369:
  cmp    %ebx,%edx
  jl     L1018
  mov    %r8b,(%rsi)
  sub    $0x1,%edx
  add    $0x1,%ebx
  mov    %cl,(%r9)
  jmp    L1018
  nopl   (%rax)
L385:
  cmp    %r8b,%dil
  jl     L335
  mov    %r8b,(%rsi)
  sub    $0x1,%edx
  add    $0x1,%ebx
  mov    %cl,(%r9)
  jmp    L1018
L756:
  mov    %r11,%r9
  jmp    L698
L1010:
  add    $0x48,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L181:
  mov    %r10d,%esi
  mov    %r15,%rdi
  call   <sort_me>
  jmp    L767
```

assistant: ```c
void sort_me(char *array, int begin, int end) {
  int pivot, item, left_index, right_index;
  pivot = array[(begin + end) / 2];
  left_index = begin;
  right_index = end;
  while (left_index <= right_index) {
    while (array[left_index] < pivot)
      left_index++;
    while (array[right_index] > pivot)
      right_index--;
    if (left_index <= right_index) {
      item = array[left_index];
      array[left_index] = array[right_index];
      array[right_index] = item;
      right_index--;
      left_index++;
    }
  }
  if (right_index > begin)
    sort_me(array, begin, right_index);
  if (left_index < end)
    sort_me(array, left_index, end);
}
```