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

```asm
<mark_cluster_numbers>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x90,%rsp
  mov    %rdi,-0x68(%rbp)
  mov    %rsi,-0x70(%rbp)
  mov    %rdx,-0x78(%rbp)
  mov    %ecx,-0x7c(%rbp)
  mov    %r8d,-0x80(%rbp)
  mov    %r9,-0x88(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x44(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x7c(%rbp),%esi
  mov    -0x68(%rbp),%rax
  mov    $0xffffffff,%ecx
  mov    %rax,%rdi
  call   <fill_matrix@plt>
  movl   $0x0,-0x50(%rbp)
  jmp    L64
L48:
  movl   $0x0,-0x4c(%rbp)
  jmp    L60
L51:
  mov    -0x50(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x4c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  test   %eax,%eax
  jns    L76
  mov    -0x50(%rbp),%eax
  mov    %eax,-0x38(%rbp)
  mov    -0x4c(%rbp),%eax
  mov    %eax,-0x34(%rbp)
  lea    -0x30(%rbp),%r9
  lea    -0x38(%rbp),%r8
  mov    -0x80(%rbp),%ecx
  mov    -0x7c(%rbp),%edx
  mov    -0x78(%rbp),%rsi
  mov    -0x70(%rbp),%rax
  sub    $0x8,%rsp
  lea    -0x54(%rbp),%rdi
  push   %rdi
  mov    %rax,%rdi
  call   <get_bonded_neighbors@plt>
  add    $0x10,%rsp
  mov    -0x50(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x4c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rax,%rdx
  mov    -0x44(%rbp),%eax
  mov    %eax,(%rdx)
  movl   $0x0,-0x48(%rbp)
  jmp    L101
L44:
  mov    -0x48(%rbp),%eax
  cltq
  mov    -0x30(%rbp,%rax,8),%eax
  mov    %eax,-0x40(%rbp)
  mov    -0x48(%rbp),%eax
  cltq
  mov    -0x2c(%rbp,%rax,8),%eax
  mov    %eax,-0x3c(%rbp)
  mov    -0x40(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x3c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0xffffffff,%eax
  jne    L11
  lea    -0x30(%rbp),%rdx
  mov    -0x48(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    (%rdx,%rax,1),%r9
  mov    -0x80(%rbp),%r8d
  mov    -0x7c(%rbp),%ecx
  mov    -0x78(%rbp),%rdx
  mov    -0x70(%rbp),%rsi
  mov    -0x68(%rbp),%rax
  sub    $0x8,%rsp
  mov    -0x44(%rbp),%edi
  push   %rdi
  mov    %rax,%rdi
  call   <mark_one_cluster_aux@plt>
  add    $0x10,%rsp
L11:
  addl   $0x1,-0x48(%rbp)
L101:
  mov    -0x54(%rbp),%eax
  cmp    %eax,-0x48(%rbp)
  jl     L44
  addl   $0x1,-0x44(%rbp)
  jmp    L62
L76:
  nop
L62:
  addl   $0x1,-0x4c(%rbp)
L60:
  mov    -0x4c(%rbp),%eax
  cmp    -0x80(%rbp),%eax
  jl     L51
  addl   $0x1,-0x50(%rbp)
L64:
  mov    -0x50(%rbp),%eax
  cmp    -0x7c(%rbp),%eax
  jl     L48
  cmpq   $0x0,-0x88(%rbp)
  je     L74
  mov    -0x88(%rbp),%rax
  mov    -0x44(%rbp),%edx
  mov    %edx,(%rax)
L74:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L1
  call   <__stack_chk_fail@plt>
L1:
  leave
  ret
```

assistant: ```c
void mark_cluster_numbers(int **site_marks, int **vbonds, int **hbonds, int M, int N, int *pnum_clusters) {
  int neighbors[4][2];
  int numnei;
  int i, j, m;
  int A[2];
  int cluster_number = 0;
  fill_matrix(site_marks, M, N, -1);
  for (i = 0; i < M; i++) {
    for (j = 0; j < N; j++) {
      if (site_marks[i][j] >= 0)
        continue;
      A[0] = i;
      A[1] = j;
      get_bonded_neighbors(vbonds, hbonds, M, N, A, neighbors, &numnei);
      site_marks[i][j] = cluster_number;
      for (m = 0; m < numnei; m++) {
        int Bi = neighbors[m][0];
        int Bj = neighbors[m][1];
        if (site_marks[Bi][Bj] == -1) {
          mark_one_cluster_aux(site_marks, vbonds, hbonds, M, N, neighbors[m], cluster_number);
        }
      }
      cluster_number++;
    }
  }
  if (pnum_clusters)
    *pnum_clusters = cluster_number;
}
```