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

```asm
<box_partition>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %edi,-0x44(%rbp)
  mov    %esi,-0x48(%rbp)
  mov    %edx,-0x4c(%rbp)
  mov    %rcx,-0x58(%rbp)
  mov    %r8,-0x60(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x48(%rbp),%eax
  sub    -0x44(%rbp),%eax
  mov    %eax,-0x3c(%rbp)
  cmpl   $0x1,-0x3c(%rbp)
  jne    L43
  mov    -0x44(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x60(%rbp),%rax
  add    %rax,%rdx
  mov    -0x58(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  mov    -0x44(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x60(%rbp),%rax
  add    %rax,%rdx
  mov    -0x58(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    %eax,0x4(%rdx)
  mov    -0x58(%rbp),%rax
  lea    0x8(%rax),%rcx
  mov    -0x44(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x60(%rbp),%rax
  add    %rax,%rdx
  mov    (%rcx),%eax
  mov    %eax,0x8(%rdx)
  mov    -0x58(%rbp),%rax
  lea    0x8(%rax),%rcx
  mov    -0x44(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x60(%rbp),%rax
  add    %rax,%rdx
  mov    0x4(%rcx),%eax
  mov    %eax,0xc(%rdx)
  mov    -0x58(%rbp),%rax
  lea    0x10(%rax),%rcx
  mov    -0x44(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x60(%rbp),%rax
  add    %rax,%rdx
  mov    (%rcx),%eax
  mov    %eax,0x10(%rdx)
  mov    -0x58(%rbp),%rax
  lea    0x10(%rax),%rcx
  mov    -0x44(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x60(%rbp),%rax
  add    %rax,%rdx
  mov    0x4(%rcx),%eax
  mov    %eax,0x14(%rdx)
  jmp    L45
L43:
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    0x4(%rax),%eax
  mov    -0x4c(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x58(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rdx),%edx
  sub    %edx,%eax
  mov    %eax,-0x38(%rbp)
  mov    -0x3c(%rbp),%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,-0x34(%rbp)
  mov    -0x3c(%rbp),%eax
  sub    -0x34(%rbp),%eax
  mov    %eax,-0x30(%rbp)
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x38(%rbp),%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x30(%rbp),%xmm0
  pxor   %xmm2,%xmm2
  cvtsi2sdl -0x3c(%rbp),%xmm2
  divsd  %xmm2,%xmm0
  mulsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,-0x2c(%rbp)
  mov    -0x38(%rbp),%eax
  sub    -0x2c(%rbp),%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x4c(%rbp),%eax
  add    $0x2,%eax
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  mov    %eax,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%edx
  mov    %edx,-0x24(%rbp)
  mov    -0x24(%rbp),%ecx
  mov    %ecx,%edx
  add    %edx,%edx
  add    %ecx,%edx
  sub    %edx,%eax
  mov    %eax,-0x24(%rbp)
  cmpl   $0x0,-0x34(%rbp)
  je     L29
  mov    -0x58(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x58(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x58(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x58(%rbp),%rax
  add    $0x8,%rax
  mov    0x4(%rax),%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x58(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%eax
  mov    %eax,-0x10(%rbp)
  mov    -0x58(%rbp),%rax
  add    $0x10,%rax
  mov    0x4(%rax),%eax
  mov    %eax,-0xc(%rbp)
  mov    -0x4c(%rbp),%eax
  cltq
  mov    -0x20(%rbp,%rax,8),%edx
  mov    -0x28(%rbp),%eax
  add    %eax,%edx
  mov    -0x4c(%rbp),%eax
  cltq
  mov    %edx,-0x1c(%rbp,%rax,8)
  mov    -0x44(%rbp),%edx
  mov    -0x34(%rbp),%eax
  lea    (%rdx,%rax,1),%esi
  mov    -0x60(%rbp),%rdi
  lea    -0x20(%rbp),%rcx
  mov    -0x24(%rbp),%edx
  mov    -0x44(%rbp),%eax
  mov    %rdi,%r8
  mov    %eax,%edi
  call   <box_partition>
L29:
  cmpl   $0x0,-0x30(%rbp)
  je     L45
  mov    -0x58(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x58(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x58(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x58(%rbp),%rax
  add    $0x8,%rax
  mov    0x4(%rax),%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x58(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%eax
  mov    %eax,-0x10(%rbp)
  mov    -0x58(%rbp),%rax
  add    $0x10,%rax
  mov    0x4(%rax),%eax
  mov    %eax,-0xc(%rbp)
  mov    -0x34(%rbp),%eax
  add    %eax,-0x44(%rbp)
  mov    -0x4c(%rbp),%eax
  cltq
  mov    -0x20(%rbp,%rax,8),%edx
  mov    -0x28(%rbp),%eax
  add    %eax,%edx
  mov    -0x4c(%rbp),%eax
  cltq
  mov    %edx,-0x20(%rbp,%rax,8)
  mov    -0x4c(%rbp),%eax
  cltq
  mov    -0x20(%rbp,%rax,8),%edx
  mov    -0x2c(%rbp),%eax
  add    %eax,%edx
  mov    -0x4c(%rbp),%eax
  cltq
  mov    %edx,-0x1c(%rbp,%rax,8)
  mov    -0x44(%rbp),%edx
  mov    -0x30(%rbp),%eax
  lea    (%rdx,%rax,1),%esi
  mov    -0x60(%rbp),%rdi
  lea    -0x20(%rbp),%rcx
  mov    -0x24(%rbp),%edx
  mov    -0x44(%rbp),%eax
  mov    %rdi,%r8
  mov    %eax,%edi
  call   <box_partition>
L45:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L15
  call   <__stack_chk_fail@plt>
L15:
  leave
  ret
```

assistant: ```c
void box_partition(int ip, int up, int axis, const int box[3][2], int p_box[][3][2]) {
  const int np = up - ip;
  if (1 == np) {
    p_box[ip][0][0] = box[0][0];
    p_box[ip][0][1] = box[0][1];
    p_box[ip][1][0] = box[1][0];
    p_box[ip][1][1] = box[1][1];
    p_box[ip][2][0] = box[2][0];
    p_box[ip][2][1] = box[2][1];
  } else {
    const int n = box[axis][1] - box[axis][0];
    const int np_low = np / 2;
    const int np_upp = np - np_low;
    const int n_upp = (int)(((double)n) * (((double)np_upp) / ((double)np)));
    const int n_low = n - n_upp;
    const int next_axis = (axis + 2) % 3;
    if (np_low) {
      int dbox[3][2];
      dbox[0][0] = box[0][0];
      dbox[0][1] = box[0][1];
      dbox[1][0] = box[1][0];
      dbox[1][1] = box[1][1];
      dbox[2][0] = box[2][0];
      dbox[2][1] = box[2][1];
      dbox[axis][1] = dbox[axis][0] + n_low;
      box_partition(ip, ip + np_low, next_axis, (const int(*)[2])dbox, p_box);
    }
    if (np_upp) {
      int dbox[3][2];
      dbox[0][0] = box[0][0];
      dbox[0][1] = box[0][1];
      dbox[1][0] = box[1][0];
      dbox[1][1] = box[1][1];
      dbox[2][0] = box[2][0];
      dbox[2][1] = box[2][1];
      ip += np_low;
      dbox[axis][0] += n_low;
      dbox[axis][1] = dbox[axis][0] + n_upp;
      box_partition(ip, ip + np_upp, next_axis, (const int(*)[2])dbox, p_box);
    }
  }
}
```