user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<max>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  movslq %edx,%r13
  push   %r12
  mov    %rdi,%r12
  push   %rbp
  movslq %esi,%rbp
  push   %rbx
  sub    $0x18,%rsp
  cmp    %r13d,%ebp
  jg     L628
  jne    L347
  mov    (%rdi,%rbp,4),%eax
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L628:
  xor    %edi,%edi
  call   <exit@plt>
L347:
  lea    0x0(%rbp,%r13,1),%eax
  mov    %eax,%ebx
  shr    $0x1f,%ebx
  add    %eax,%ebx
  sar    %ebx
  cmp    %ebp,%ebx
  jl     L669
  jne    L338
  mov    (%r12,%rbp,4),%eax
  lea    0x1(%rbx),%r15d
  mov    %eax,0x4(%rsp)
  cmp    %r13d,%r15d
  jg     L329
L491:
  jne    L593
  mov    (%r12,%r13,4),%eax
L159:
  mov    0x4(%rsp),%ecx
  cmp    %ecx,%eax
  cmovl  %ecx,%eax
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L669:
  xor    %edi,%edi
  call   <exit@plt>
L338:
  lea    (%rbx,%rbp,1),%eax
  mov    %eax,%r15d
  shr    $0x1f,%r15d
  add    %eax,%r15d
  sar    %r15d
  cmp    %r15d,%ebp
  jg     L233
  jne    L164
  movslq %r15d,%rax
  add    $0x1,%r15d
  mov    (%r12,%rax,4),%r14d
  cmp    %r15d,%ebx
  jge    L30
L527:
  xor    %edi,%edi
  call   <exit@plt>
L483:
  lea    (%rbx,%r15,1),%eax
  mov    %eax,%ebp
  shr    $0x1f,%ebp
  add    %eax,%ebp
  sar    %ebp
  cmp    %ebp,%r15d
  jg     L314
  jne    L541
  movslq %ebp,%rax
  mov    (%r12,%rax,4),%r15d
L501:
  add    $0x1,%ebp
  cmp    %ebp,%ebx
  jl     L587
  jne    L101
  movslq %ebx,%rax
  mov    (%r12,%rax,4),%ebp
L72:
  cmp    %r15d,%ebp
  cmovl  %r15d,%ebp
  jmp    L661
  nopl   (%rax)
L233:
  xor    %edi,%edi
  call   <exit@plt>
L164:
  lea    0x0(%rbp,%r15,1),%eax
  mov    %eax,%r14d
  shr    $0x1f,%r14d
  add    %eax,%r14d
  sar    %r14d
  cmp    %r14d,%ebp
  jg     L424
  jne    L380
  movslq %r14d,%rax
  mov    (%r12,%rax,4),%ebp
L528:
  add    $0x1,%r14d
  cmp    %r14d,%r15d
  jl     L237
  jne    L532
  movslq %r15d,%rax
  mov    (%r12,%rax,4),%r14d
L476:
  cmp    %ebp,%r14d
  cmovl  %ebp,%r14d
  add    $0x1,%r15d
  cmp    %r15d,%ebx
  jl     L527
L30:
  jne    L483
  movslq %ebx,%rax
  mov    (%r12,%rax,4),%ebp
L661:
  cmp    %r14d,%ebp
  lea    0x1(%rbx),%r15d
  cmovge %ebp,%r14d
  mov    %r14d,0x4(%rsp)
  cmp    %r13d,%r15d
  jle    L491
L329:
  xor    %edi,%edi
  call   <exit@plt>
L593:
  lea    (%r15,%r13,1),%eax
  mov    %eax,%ecx
  shr    $0x1f,%ecx
  add    %eax,%ecx
  sar    %ecx
  mov    %ecx,%ebp
  cmp    %ecx,%r15d
  jg     L254
  jne    L384
  movslq %ecx,%rax
  lea    0x1(%rbp),%r14d
  mov    (%r12,%rax,4),%ebx
  cmp    %r14d,%r13d
  jge    L346
L450:
  xor    %edi,%edi
  call   <exit@plt>
L653:
  lea    0x0(%r13,%r14,1),%eax
  mov    %eax,%r15d
  shr    $0x1f,%r15d
  add    %eax,%r15d
  sar    %r15d
  cmp    %r15d,%r14d
  jg     L129
  jne    L226
  movslq %r15d,%rax
  mov    (%r12,%rax,4),%r14d
L300:
  add    $0x1,%r15d
  cmp    %r15d,%r13d
  jl     L657
  jne    L185
  mov    (%r12,%r13,4),%eax
L563:
  cmp    %r14d,%eax
  cmovl  %r14d,%eax
  jmp    L366
  nopl   0x0(%rax,%rax,1)
L254:
  xor    %edi,%edi
  call   <exit@plt>
L384:
  lea    (%r15,%rbp,1),%eax
  mov    %eax,%r14d
  shr    $0x1f,%r14d
  add    %eax,%r14d
  sar    %r14d
  cmp    %r14d,%r15d
  jg     L335
  jne    L466
  movslq %r14d,%rax
  mov    (%r12,%rax,4),%r15d
L111:
  add    $0x1,%r14d
  cmp    %r14d,%ebp
  jl     L287
  jne    L570
  movslq %ebp,%rax
  mov    (%r12,%rax,4),%ebx
L519:
  cmp    %r15d,%ebx
  lea    0x1(%rbp),%r14d
  cmovl  %r15d,%ebx
  cmp    %r14d,%r13d
  jl     L450
L346:
  jne    L653
  mov    (%r12,%r13,4),%eax
L366:
  cmp    %ebx,%eax
  cmovl  %ebx,%eax
  jmp    L159
L335:
  xor    %edi,%edi
  call   <exit@plt>
L466:
  lea    (%r15,%r14,1),%eax
  mov    %eax,%ebx
  shr    $0x1f,%ebx
  add    %eax,%ebx
  sar    %ebx
  cmp    %ebx,%r15d
  jg     L102
  jne    L507
  movslq %ebx,%rax
  mov    (%r12,%rax,4),%r8d
L535:
  lea    0x1(%rbx),%r15d
  cmp    %r15d,%r14d
  jl     L423
  jne    L459
  movslq %r14d,%rax
  mov    (%r12,%rax,4),%r15d
L87:
  cmp    %r8d,%r15d
  cmovl  %r8d,%r15d
  jmp    L111
L424:
  xor    %edi,%edi
  call   <exit@plt>
L380:
  lea    0x0(%rbp,%r14,1),%eax
  mov    %eax,%ecx
  shr    $0x1f,%ecx
  add    %eax,%ecx
  sar    %ecx
  cmp    %ecx,%ebp
  jg     L604
  jne    L422
  movslq %ecx,%rax
  mov    (%r12,%rax,4),%r8d
L652:
  lea    0x1(%rcx),%ebp
  cmp    %ebp,%r14d
  jl     L334
  jne    L402
  movslq %r14d,%rax
  mov    (%r12,%rax,4),%ebp
L373:
  cmp    %r8d,%ebp
  cmovl  %r8d,%ebp
  jmp    L528
  nop
L287:
  xor    %edi,%edi
  call   <exit@plt>
L570:
  lea    0x0(%rbp,%r14,1),%eax
  mov    %r14d,%esi
  mov    %r12,%rdi
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %eax,%edx
  sar    %edx
  mov    %edx,0x8(%rsp)
  call   <max>
  mov    0x8(%rsp),%edx
  mov    %r12,%rdi
  mov    %eax,%ebx
  lea    0x1(%rdx),%esi
  mov    %ebp,%edx
  call   <max>
  cmp    %eax,%ebx
  cmovl  %eax,%ebx
  jmp    L519
  nopl   0x0(%rax)
L587:
  xor    %edi,%edi
  call   <exit@plt>
L101:
  lea    (%rbx,%rbp,1),%eax
  mov    %ebp,%esi
  mov    %r12,%rdi
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %eax,%edx
  sar    %edx
  mov    %edx,0x4(%rsp)
  call   <max>
  mov    0x4(%rsp),%edx
  mov    %r12,%rdi
  mov    %eax,%ebp
  lea    0x1(%rdx),%esi
  mov    %ebx,%edx
  call   <max>
  cmp    %eax,%ebp
  cmovl  %eax,%ebp
  jmp    L72
  cs nopw 0x0(%rax,%rax,1)
L314:
  xor    %edi,%edi
  call   <exit@plt>
L541:
  lea    (%r15,%rbp,1),%eax
  mov    %r15d,%esi
  mov    %r12,%rdi
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %eax,%edx
  sar    %edx
  mov    %edx,0x4(%rsp)
  call   <max>
  mov    0x4(%rsp),%edx
  mov    %r12,%rdi
  mov    %eax,%r15d
  lea    0x1(%rdx),%esi
  mov    %ebp,%edx
  call   <max>
  cmp    %eax,%r15d
  cmovl  %eax,%r15d
  jmp    L501
  nopl   0x0(%rax,%rax,1)
L237:
  xor    %edi,%edi
  call   <exit@plt>
L532:
  lea    (%r15,%r14,1),%eax
  mov    %r14d,%esi
  mov    %r12,%rdi
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %eax,%edx
  sar    %edx
  mov    %edx,0x4(%rsp)
  call   <max>
  mov    0x4(%rsp),%edx
  mov    %r12,%rdi
  mov    %eax,%r14d
  lea    0x1(%rdx),%esi
  mov    %r15d,%edx
  call   <max>
  cmp    %eax,%r14d
  cmovl  %eax,%r14d
  jmp    L476
  nopl   0x0(%rax)
L657:
  xor    %edi,%edi
  call   <exit@plt>
L185:
  lea    0x0(%r13,%r15,1),%eax
  mov    %eax,%ecx
  shr    $0x1f,%ecx
  add    %eax,%ecx
  sar    %ecx
  cmp    %ecx,%r15d
  jg     L409
  jne    L136
  movslq %ecx,%rax
  mov    (%r12,%rax,4),%r8d
L123:
  lea    0x1(%rcx),%r15d
  cmp    %r15d,%r13d
  jl     L263
  jne    L202
  mov    (%r12,%r13,4),%eax
L20:
  cmp    %r8d,%eax
  cmovl  %r8d,%eax
  jmp    L563
  xchg   %ax,%ax
L129:
  xor    %edi,%edi
  call   <exit@plt>
L226:
  lea    (%r14,%r15,1),%eax
  mov    %eax,%ecx
  shr    $0x1f,%ecx
  add    %eax,%ecx
  sar    %ecx
  cmp    %ecx,%r14d
  jg     L118
  jne    L221
  movslq %ecx,%rax
  mov    (%r12,%rax,4),%r8d
L3:
  lea    0x1(%rcx),%r14d
  cmp    %r14d,%r15d
  jl     L428
  jne    L544
  movslq %r15d,%rax
  mov    (%r12,%rax,4),%r14d
L211:
  cmp    %r8d,%r14d
  cmovl  %r8d,%r14d
  jmp    L300
L334:
  xor    %edi,%edi
  mov    %r8d,0x4(%rsp)
  call   <exit@plt>
  mov    0x4(%rsp),%r8d
L402:
  lea    (%r14,%rbp,1),%eax
  mov    %ebp,%esi
  mov    %r12,%rdi
  mov    %r8d,0x8(%rsp)
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %eax,%edx
  sar    %edx
  mov    %edx,0x4(%rsp)
  call   <max>
  mov    0x4(%rsp),%edx
  mov    %r12,%rdi
  mov    %eax,%ebp
  lea    0x1(%rdx),%esi
  mov    %r14d,%edx
  call   <max>
  mov    0x8(%rsp),%r8d
  cmp    %eax,%ebp
  cmovl  %eax,%ebp
  jmp    L373
  nopl   0x0(%rax)
L604:
  xor    %edi,%edi
  mov    %ecx,0x4(%rsp)
  call   <exit@plt>
  mov    0x4(%rsp),%ecx
L422:
  lea    0x0(%rbp,%rcx,1),%eax
  mov    %ebp,%esi
  mov    %r12,%rdi
  mov    %ecx,0x8(%rsp)
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %eax,%edx
  sar    %edx
  mov    %edx,0x4(%rsp)
  call   <max>
  mov    0x4(%rsp),%edx
  mov    0x8(%rsp),%ecx
  mov    %r12,%rdi
  mov    %eax,%ebp
  lea    0x1(%rdx),%esi
  mov    %ecx,%edx
  mov    %ecx,0x4(%rsp)
  call   <max>
  mov    0x4(%rsp),%ecx
  cmp    %eax,%ebp
  cmovge %ebp,%eax
  mov    %eax,%r8d
  jmp    L652
  nopw   0x0(%rax,%rax,1)
L263:
  xor    %edi,%edi
  mov    %r8d,0x8(%rsp)
  call   <exit@plt>
  mov    0x8(%rsp),%r8d
L202:
  lea    0x0(%r13,%r15,1),%eax
  mov    %r15d,%esi
  mov    %r12,%rdi
  mov    %r8d,0xc(%rsp)
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %eax,%edx
  sar    %edx
  mov    %edx,0x8(%rsp)
  call   <max>
  mov    0x8(%rsp),%edx
  mov    %r12,%rdi
  mov    %eax,%r15d
  lea    0x1(%rdx),%esi
  mov    %r13d,%edx
  call   <max>
  mov    0xc(%rsp),%r8d
  cmp    %eax,%r15d
  cmovge %r15d,%eax
  jmp    L20
  nopl   0x0(%rax)
L409:
  xor    %edi,%edi
  mov    %ecx,0x8(%rsp)
  call   <exit@plt>
  mov    0x8(%rsp),%ecx
L136:
  lea    (%r15,%rcx,1),%eax
  mov    %r15d,%esi
  mov    %r12,%rdi
  mov    %ecx,0xc(%rsp)
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %eax,%edx
  sar    %edx
  mov    %edx,0x8(%rsp)
  call   <max>
  mov    0x8(%rsp),%edx
  mov    0xc(%rsp),%ecx
  mov    %r12,%rdi
  mov    %eax,%r15d
  lea    0x1(%rdx),%esi
  mov    %ecx,%edx
  mov    %ecx,0x8(%rsp)
  call   <max>
  mov    0x8(%rsp),%ecx
  cmp    %eax,%r15d
  cmovge %r15d,%eax
  mov    %eax,%r8d
  jmp    L123
  cs nopw 0x0(%rax,%rax,1)
L423:
  xor    %edi,%edi
  mov    %r8d,0x8(%rsp)
  call   <exit@plt>
  mov    0x8(%rsp),%r8d
L459:
  lea    (%r14,%r15,1),%eax
  mov    %r15d,%esi
  mov    %r12,%rdi
  mov    %r8d,0x8(%rsp)
  mov    %eax,%ebx
  shr    $0x1f,%ebx
  add    %eax,%ebx
  sar    %ebx
  mov    %ebx,%edx
  call   <max>
  lea    0x1(%rbx),%esi
  mov    %r14d,%edx
  mov    %r12,%rdi
  mov    %eax,%r15d
  call   <max>
  mov    0x8(%rsp),%r8d
  cmp    %eax,%r15d
  cmovl  %eax,%r15d
  jmp    L87
  nopw   0x0(%rax,%rax,1)
L102:
  xor    %edi,%edi
  call   <exit@plt>
L507:
  lea    (%r15,%rbx,1),%eax
  mov    %r15d,%esi
  mov    %r12,%rdi
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %eax,%edx
  sar    %edx
  mov    %edx,0x8(%rsp)
  call   <max>
  mov    0x8(%rsp),%edx
  mov    %r12,%rdi
  mov    %eax,%r15d
  lea    0x1(%rdx),%esi
  mov    %ebx,%edx
  call   <max>
  cmp    %eax,%r15d
  cmovge %r15d,%eax
  mov    %eax,%r8d
  jmp    L535
  xchg   %ax,%ax
L428:
  xor    %edi,%edi
  mov    %r8d,0x8(%rsp)
  call   <exit@plt>
  mov    0x8(%rsp),%r8d
L544:
  lea    (%r15,%r14,1),%eax
  mov    %r14d,%esi
  mov    %r12,%rdi
  mov    %r8d,0xc(%rsp)
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %eax,%edx
  sar    %edx
  mov    %edx,0x8(%rsp)
  call   <max>
  mov    0x8(%rsp),%edx
  mov    %r12,%rdi
  mov    %eax,%r14d
  lea    0x1(%rdx),%esi
  mov    %r15d,%edx
  call   <max>
  mov    0xc(%rsp),%r8d
  cmp    %eax,%r14d
  cmovl  %eax,%r14d
  jmp    L211
  nopl   0x0(%rax,%rax,1)
L118:
  xor    %edi,%edi
  mov    %ecx,0x8(%rsp)
  call   <exit@plt>
  mov    0x8(%rsp),%ecx
L221:
  lea    (%r14,%rcx,1),%eax
  mov    %r14d,%esi
  mov    %r12,%rdi
  mov    %ecx,0xc(%rsp)
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %eax,%edx
  sar    %edx
  mov    %edx,0x8(%rsp)
  call   <max>
  mov    0x8(%rsp),%edx
  mov    0xc(%rsp),%ecx
  mov    %r12,%rdi
  mov    %eax,%r14d
  lea    0x1(%rdx),%esi
  mov    %ecx,%edx
  mov    %ecx,0x8(%rsp)
  call   <max>
  mov    0x8(%rsp),%ecx
  cmp    %eax,%r14d
  cmovge %r14d,%eax
  mov    %eax,%r8d
  jmp    L3
```

assistant: ```c
int max(int a[], int lo, int hi) {
  if (lo > hi) {
    exit(0);
  }
  if (lo == hi) {
    return a[lo];
  } else {
    int lo_num, hi_num;
    lo_num = max(a, lo, ((lo + hi) / 2));
    hi_num = max(a, (lo + hi) / 2 + 1, hi);
    if (lo_num >= hi_num) {
      return lo_num;
    } else
      return hi_num;
  }
}
```