user: 下面的汇编指令对应的C源代码是什么:

```asm
<binary_search>:
  endbr64
  push   %r15
  mov    %rsi,%r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x58,%rsp
  mov    %rdi,0x8(%rsp)
  mov    %edx,0x28(%rsp)
  mov    %ecx,0x10(%rsp)
  cmp    %ecx,%edx
  jg     L228
L232:
  mov    0x28(%rsp),%eax
  add    0x10(%rsp),%eax
  mov    %r15,%rsi
  mov    %eax,%ebx
  mov    0x8(%rsp),%rcx
  shr    $0x1f,%ebx
  add    %eax,%ebx
  sar    %ebx
  movslq %ebx,%rax
  mov    %ebx,%r12d
  lea    (%rcx,%rax,8),%rbp
  mov    0x0(%rbp),%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L309
  mov    0x0(%rbp),%rdi
  mov    %r15,%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  js     L403
  lea    -0x1(%rbx),%eax
  mov    %eax,0x10(%rsp)
L438:
  mov    0x10(%rsp),%edx
  cmp    %edx,0x28(%rsp)
  jle    L232
L228:
  mov    $0xffffffff,%r12d
L309:
  add    $0x58,%rsp
  mov    %r12d,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L403:
  lea    0x1(%rbx),%eax
  mov    0x10(%rsp),%edx
  mov    %eax,0x28(%rsp)
  lea    0x2(%rbx),%eax
  mov    %eax,0x2c(%rsp)
  cmp    %edx,%eax
  jg     L438
  mov    %edx,0x14(%rsp)
L105:
  mov    0x2c(%rsp),%eax
  add    0x14(%rsp),%eax
  mov    %r15,%rsi
  mov    %eax,%ebx
  mov    0x8(%rsp),%rdx
  shr    $0x1f,%ebx
  add    %eax,%ebx
  sar    %ebx
  movslq %ebx,%rax
  lea    (%rdx,%rax,8),%rbp
  mov    0x0(%rbp),%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L438
  mov    0x0(%rbp),%rdi
  mov    %r15,%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  js     L289
  lea    -0x1(%rbx),%eax
  mov    %eax,0x14(%rsp)
L117:
  mov    0x2c(%rsp),%ecx
  cmp    %ecx,0x14(%rsp)
  jge    L105
  jmp    L438
  nopw   0x0(%rax,%rax,1)
L289:
  lea    0x1(%rbx),%eax
  mov    0x14(%rsp),%edx
  mov    %eax,0x2c(%rsp)
  lea    0x2(%rbx),%eax
  mov    %eax,0x30(%rsp)
  cmp    %edx,%eax
  jg     L117
  mov    %edx,0x18(%rsp)
  mov    %r15,%rbp
L84:
  mov    0x30(%rsp),%eax
  add    0x18(%rsp),%eax
  mov    %rbp,%rsi
  mov    %eax,%ebx
  mov    0x8(%rsp),%rcx
  shr    $0x1f,%ebx
  add    %eax,%ebx
  sar    %ebx
  movslq %ebx,%rax
  lea    (%rcx,%rax,8),%r12
  mov    (%r12),%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L324
  mov    (%r12),%rdi
  mov    %rbp,%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  js     L11
  lea    -0x1(%rbx),%eax
  mov    %eax,0x18(%rsp)
L17:
  mov    0x30(%rsp),%edx
  cmp    %edx,0x18(%rsp)
  jge    L84
L324:
  mov    %rbp,%r15
  jmp    L117
  nopl   (%rax)
L11:
  lea    0x1(%rbx),%eax
  mov    0x18(%rsp),%ecx
  mov    %eax,0x30(%rsp)
  lea    0x2(%rbx),%eax
  mov    %eax,0x34(%rsp)
  cmp    %ecx,%eax
  jg     L17
  mov    %ecx,0x1c(%rsp)
  mov    0x8(%rsp),%r12
  mov    %rbp,%r15
L437:
  mov    0x34(%rsp),%eax
  add    0x1c(%rsp),%eax
  mov    %r15,%rsi
  mov    %eax,%ebx
  shr    $0x1f,%ebx
  add    %eax,%ebx
  sar    %ebx
  movslq %ebx,%rax
  lea    (%r12,%rax,8),%rbp
  mov    0x0(%rbp),%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L198
  mov    0x0(%rbp),%rdi
  mov    %r15,%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  js     L294
  lea    -0x1(%rbx),%eax
  mov    %eax,0x1c(%rsp)
L252:
  mov    0x1c(%rsp),%ecx
  cmp    %ecx,0x34(%rsp)
  jle    L437
L198:
  mov    %r15,%rbp
  jmp    L17
  nopl   (%rax)
L294:
  lea    0x1(%rbx),%eax
  mov    0x1c(%rsp),%edx
  mov    %eax,0x34(%rsp)
  lea    0x2(%rbx),%eax
  mov    %eax,0x38(%rsp)
  cmp    %edx,%eax
  jg     L252
  mov    %edx,0x20(%rsp)
  mov    %r12,%r14
  mov    %r15,%r13
L34:
  mov    0x38(%rsp),%eax
  add    0x20(%rsp),%eax
  mov    %r13,%rsi
  mov    %eax,%ebx
  shr    $0x1f,%ebx
  add    %eax,%ebx
  sar    %ebx
  movslq %ebx,%rax
  lea    (%r14,%rax,8),%rbp
  mov    0x0(%rbp),%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L103
  mov    0x0(%rbp),%rdi
  mov    %r13,%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  js     L376
  lea    -0x1(%rbx),%eax
  mov    %eax,0x20(%rsp)
L148:
  mov    0x20(%rsp),%edx
  cmp    %edx,0x38(%rsp)
  jle    L34
L103:
  mov    %r14,%r12
  mov    %r13,%r15
  jmp    L252
  cs nopw 0x0(%rax,%rax,1)
L376:
  lea    0x1(%rbx),%eax
  mov    0x20(%rsp),%ecx
  mov    %eax,0x38(%rsp)
  lea    0x2(%rbx),%eax
  mov    %eax,0x3c(%rsp)
  cmp    %ecx,%eax
  jg     L148
  mov    %ecx,0x24(%rsp)
  mov    %r14,%r15
L231:
  mov    0x3c(%rsp),%eax
  add    0x24(%rsp),%eax
  mov    %r13,%rsi
  mov    %eax,%ebx
  shr    $0x1f,%ebx
  add    %eax,%ebx
  sar    %ebx
  movslq %ebx,%rax
  lea    (%r15,%rax,8),%rbp
  mov    0x0(%rbp),%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L110
  mov    0x0(%rbp),%rdi
  mov    %r13,%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  js     L426
  lea    -0x1(%rbx),%eax
  mov    %eax,0x24(%rsp)
L99:
  mov    0x24(%rsp),%ecx
  cmp    %ecx,0x3c(%rsp)
  jle    L231
L110:
  mov    %r15,%r14
  jmp    L148
L426:
  lea    0x1(%rbx),%eax
  mov    0x24(%rsp),%r14d
  mov    %eax,0x3c(%rsp)
  lea    0x2(%rbx),%eax
  mov    %eax,0x40(%rsp)
  cmp    %r14d,%eax
  jg     L99
L24:
  mov    0x40(%rsp),%eax
  mov    %r13,%rsi
  add    %r14d,%eax
  mov    %eax,%ebx
  shr    $0x1f,%ebx
  add    %eax,%ebx
  sar    %ebx
  movslq %ebx,%rax
  lea    (%r15,%rax,8),%rbp
  mov    0x0(%rbp),%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L99
  mov    0x0(%rbp),%rdi
  mov    %r13,%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  js     L436
  lea    -0x1(%rbx),%r14d
L239:
  cmp    0x40(%rsp),%r14d
  jge    L24
  jmp    L99
  xchg   %ax,%ax
L436:
  lea    0x1(%rbx),%eax
  mov    %eax,0x40(%rsp)
  lea    0x2(%rbx),%eax
  mov    %eax,0x44(%rsp)
  cmp    %r14d,%eax
  jg     L239
  mov    %r14d,0x48(%rsp)
  mov    %r14d,%r12d
L109:
  mov    0x44(%rsp),%eax
  mov    %r13,%rsi
  add    %r12d,%eax
  mov    %eax,%ebx
  shr    $0x1f,%ebx
  add    %eax,%ebx
  sar    %ebx
  movslq %ebx,%rax
  lea    (%r15,%rax,8),%rbp
  mov    0x0(%rbp),%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L423
  mov    0x0(%rbp),%rdi
  mov    %r13,%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  js     L132
  lea    -0x1(%rbx),%r12d
L21:
  cmp    0x44(%rsp),%r12d
  jge    L109
L423:
  mov    0x48(%rsp),%r14d
  jmp    L239
  cs nopw 0x0(%rax,%rax,1)
L132:
  lea    0x1(%rbx),%eax
  add    $0x2,%ebx
  mov    %eax,0x44(%rsp)
  cmp    %r12d,%ebx
  jg     L21
  mov    %r12d,0x4c(%rsp)
  mov    %r12d,%r14d
  mov    %r13,%r12
L102:
  lea    (%rbx,%r14,1),%eax
  mov    %r12,%rsi
  mov    %eax,%ebp
  shr    $0x1f,%ebp
  add    %eax,%ebp
  sar    %ebp
  movslq %ebp,%rax
  lea    (%r15,%rax,8),%r13
  mov    0x0(%r13),%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L95
  mov    0x0(%r13),%rdi
  mov    %r12,%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  js     L329
  lea    -0x1(%rbp),%r14d
  cmp    %ebx,%r14d
  jge    L102
L95:
  mov    %r12,%r13
  mov    0x4c(%rsp),%r12d
  jmp    L21
  nopl   0x0(%rax,%rax,1)
L329:
  lea    0x1(%rbp),%ebx
  lea    0x2(%rbp),%edx
  mov    %r14d,%ecx
  mov    %r12,%rsi
  mov    %r15,%rdi
  call   <binary_search>
  cmp    %r14d,%ebx
  jle    L102
  jmp    L95
```

assistant: ```c
int binary_search(char **strings, char *target, int start_idx, int end_idx) {
  if (start_idx > end_idx)
    return -1;
  int mid_idx = (end_idx + start_idx) / 2;
  if (strcmp(strings[mid_idx], target) == 0) {
    return mid_idx;
  } else if (strcmp(strings[mid_idx], target) < 0) {
    start_idx = mid_idx + 1;
    binary_search(strings, target, start_idx + 1, end_idx);
  } else
    end_idx = mid_idx - 1;
  binary_search(strings, target, start_idx, end_idx);
}
```