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

```asm
<dbcv>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x70,%rsp
  mov    %rdi,-0x58(%rbp)
  mov    %rsi,-0x60(%rbp)
  mov    %edx,-0x64(%rbp)
  mov    %ecx,-0x68(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x68(%rbp),%ecx
  mov    -0x64(%rbp),%edx
  mov    -0x60(%rbp),%rsi
  mov    -0x58(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <a_pts_coredist@plt>
  cltq
  mov    %rax,-0x38(%rbp)
  mov    -0x64(%rbp),%edx
  mov    -0x60(%rbp),%rcx
  mov    -0x38(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <mreach_mat@plt>
  cltq
  mov    %rax,-0x30(%rbp)
  mov    -0x64(%rbp),%eax
  cltq
  shl    $0x2,%rax
  mov    %rax,%rdi
  call   <malloc@plt>
  mov    %rax,-0x28(%rbp)
  mov    -0x28(%rbp),%rcx
  lea    -0x44(%rbp),%rdx
  mov    -0x64(%rbp),%esi
  mov    -0x58(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <get_labels@plt>
  cltq
  mov    %rax,-0x20(%rbp)
  mov    -0x44(%rbp),%edi
  mov    -0x20(%rbp),%rcx
  mov    -0x64(%rbp),%edx
  mov    -0x58(%rbp),%rsi
  mov    -0x30(%rbp),%rax
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <prim_cls@plt>
  cltq
  mov    %rax,-0x18(%rbp)
  mov    -0x44(%rbp),%r8d
  mov    -0x20(%rbp),%rdi
  mov    -0x64(%rbp),%ecx
  mov    -0x58(%rbp),%rdx
  mov    -0x30(%rbp),%rsi
  mov    -0x18(%rbp),%rax
  mov    %r8d,%r9d
  mov    %rdi,%r8
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <validity_of_cluster@plt>
  cltq
  mov    %rax,-0x10(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x40(%rbp)
  movl   $0x0,-0x3c(%rbp)
  jmp    L15
L8:
  mov    -0x3c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  pxor   %xmm2,%xmm2
  cvtsi2ssl -0x64(%rbp),%xmm2
  movaps %xmm0,%xmm1
  divss  %xmm2,%xmm1
  mov    -0x3c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  movss  -0x40(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x40(%rbp)
  addl   $0x1,-0x3c(%rbp)
L15:
  mov    -0x44(%rbp),%eax
  cmp    %eax,-0x3c(%rbp)
  jl     L8
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x30(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x20(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x10(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  movss  -0x40(%rbp),%xmm0
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L16
  call   <__stack_chk_fail@plt>
L16:
  leave
  ret
```

assistant: ```c
float dbcv(int *partition, float *dm, int n_objects, int n_attributes) {
  float *apts = a_pts_coredist(partition, dm, n_objects, n_attributes);
  float *mreach_matrix = mreach_mat(apts, dm, n_objects);
  int *group_size = (int *)malloc(sizeof(int) * n_objects);
  int n_groups, *labels = get_labels(partition, n_objects, &n_groups, group_size);
  float *mreach_mst = prim_cls(mreach_matrix, partition, n_objects, labels, n_groups);
  float *vc = validity_of_cluster(mreach_mst, mreach_matrix, partition, n_objects, labels, n_groups);
  float dbcv_index = 0;
  for (int c = 0; c < n_groups; c++) {
    dbcv_index += (group_size[labels[c]] / (float)n_objects) * vc[c];
  }
  free(group_size);
  free(mreach_matrix);
  free(mreach_mst);
  free(labels);
  free(apts);
  free(vc);
  return dbcv_index;
}
```