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

```asm
<write_mesh_gmv_qual_mba>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x38,%rsp
  mov    %esi,%ebp
  mov    %rdx,%r13
  mov    %ecx,0x28(%rsp)
  mov    %r8,0x10(%rsp)
  mov    %r9,0x8(%rsp)
  lea    D143(%rip),%rsi
  call   <fopen@plt>
  mov    %rax,%r15
  mov    %ebp,%edx
  lea    D74(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  test   %ebp,%ebp
  jle    L165
  mov    %r13,%rbx
  lea    -0x1(%rbp),%eax
  lea    (%rax,%rax,2),%rax
  lea    0x18(%r13,%rax,8),%r12
  lea    D51(%rip),%rbp
L149:
  movsd  0x10(%rbx),%xmm2
  movsd  0x8(%rbx),%xmm1
  movsd  (%rbx),%xmm0
  mov    %rbp,%rsi
  mov    %r15,%rdi
  mov    $0x3,%eax
  call   <fprintf@plt>
  add    $0x18,%rbx
  cmp    %r12,%rbx
  jne    L149
L165:
  mov    0x70(%rsp),%edx
  lea    D203(%rip),%rsi
  mov    %r15,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  cmpl   $0x0,0x70(%rsp)
  jle    L129
  mov    0x78(%rsp),%rbx
  mov    0x80(%rsp),%r12
  mov    0x70(%rsp),%eax
  lea    -0x1(%rax),%eax
  shl    $0x4,%rax
  lea    0x10(%rbx,%rax,1),%rax
  mov    $0x0,%r14d
  mov    $0x0,%ebp
  mov    %r13,0x18(%rsp)
  mov    %rax,%r13
L103:
  mov    0x4(%rbx),%ecx
  mov    0xc(%rbx),%r9d
  mov    0x8(%rbx),%r8d
  mov    (%rbx),%edx
  lea    D171(%rip),%rsi
  mov    %r15,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    (%r12),%eax
  cmp    %eax,%ebp
  cmovl  %eax,%ebp
  test   %eax,%eax
  mov    $0x1,%eax
  cmove  %eax,%r14d
  add    $0x10,%rbx
  add    $0x4,%r12
  cmp    %r13,%rbx
  jne    L103
  mov    0x18(%rsp),%r13
  cmpl   $0x0,0x28(%rsp)
  jle    L205
L168:
  mov    0x8(%rsp),%rsi
  mov    %rsi,%rax
  mov    0x28(%rsp),%edi
  lea    -0x1(%rdi),%edx
  lea    0x4(%rsi,%rdx,4),%rsi
  mov    $0x1,%ecx
L89:
  mov    (%rax),%edx
  cmp    %edx,%ebp
  cmovl  %edx,%ebp
  test   %edx,%edx
  cmove  %ecx,%r14d
  add    $0x4,%rax
  cmp    %rsi,%rax
  jne    L89
  cmpl   $0x0,0x70(%rsp)
  jne    L205
  mov    %r15,%rcx
  mov    $0xb,%edx
  mov    $0x1,%esi
  lea    D15(%rip),%rdi
  call   <fwrite@plt>
L160:
  mov    0x10(%rsp),%rbx
  mov    $0x0,%r12d
  add    %r14d,%ebp
  lea    D206(%rip),%r14
L122:
  mov    0x8(%rsp),%rax
  mov    (%rax,%r12,4),%edx
  test   %edx,%edx
  cmove  %ebp,%edx
  lea    D159(%rip),%rsi
  mov    %r15,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    0x8(%rbx),%eax
  lea    (%rax,%rax,2),%edx
  movslq %edx,%rdx
  mov    0x4(%rbx),%eax
  lea    (%rax,%rax,2),%eax
  cltq
  mov    (%rbx),%ecx
  lea    (%rcx,%rcx,2),%ecx
  movslq %ecx,%rcx
  movsd  -0x18(%r13,%rcx,8),%xmm0
  movsd  -0x18(%r13,%rdx,8),%xmm2
  movsd  -0x18(%r13,%rax,8),%xmm1
  lea    D43(%rip),%rsi
  mov    %r15,%rdi
  mov    $0x3,%eax
  call   <fprintf@plt>
  mov    0x8(%rbx),%eax
  lea    0x1(%rax,%rax,2),%edx
  movslq %edx,%rdx
  mov    0x4(%rbx),%eax
  lea    0x1(%rax,%rax,2),%eax
  cltq
  mov    (%rbx),%ecx
  lea    0x1(%rcx,%rcx,2),%ecx
  movslq %ecx,%rcx
  movsd  -0x18(%r13,%rcx,8),%xmm0
  movsd  -0x18(%r13,%rdx,8),%xmm2
  movsd  -0x18(%r13,%rax,8),%xmm1
  mov    %r14,%rsi
  mov    %r15,%rdi
  mov    $0x3,%eax
  call   <fprintf@plt>
  mov    0x8(%rbx),%eax
  lea    0x2(%rax,%rax,2),%edx
  movslq %edx,%rdx
  mov    0x4(%rbx),%eax
  lea    0x2(%rax,%rax,2),%eax
  cltq
  mov    (%rbx),%ecx
  lea    0x2(%rcx,%rcx,2),%ecx
  movslq %ecx,%rcx
  movsd  -0x18(%r13,%rcx,8),%xmm0
  movsd  -0x18(%r13,%rdx,8),%xmm2
  movsd  -0x18(%r13,%rax,8),%xmm1
  mov    %r14,%rsi
  mov    %r15,%rdi
  mov    $0x3,%eax
  call   <fprintf@plt>
  add    $0x1,%r12
  add    $0xc,%rbx
  cmp    %r12d,0x28(%rsp)
  jg     L122
L80:
  mov    %r15,%rcx
  mov    $0x8,%edx
  mov    $0x1,%esi
  lea    D24(%rip),%rdi
  call   <fwrite@plt>
  mov    %r15,%rcx
  mov    $0x7,%edx
  mov    $0x1,%esi
  lea    D133(%rip),%rdi
  call   <fwrite@plt>
  mov    %r15,%rdi
  call   <fclose@plt>
  mov    $0x0,%eax
  add    $0x38,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L129:
  cmpl   $0x0,0x28(%rsp)
  jg     L92
  cmpl   $0x0,0x70(%rsp)
  jne    L109
  mov    %r15,%rcx
  mov    $0xb,%edx
  mov    $0x1,%esi
  lea    D15(%rip),%rdi
  call   <fwrite@plt>
  jmp    L80
L92:
  mov    $0x0,%r14d
  mov    $0x0,%ebp
  jmp    L168
L109:
  mov    $0x0,%r14d
  mov    $0x0,%ebp
L205:
  lea    0x0(%rbp,%r14,1),%eax
  mov    %eax,0x18(%rsp)
  mov    %eax,%edx
  lea    D27(%rip),%rsi
  mov    %r15,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  test   %ebp,%ebp
  jle    L179
  mov    $0x0,%ebx
  lea    D161(%rip),%r12
L141:
  add    $0x1,%ebx
  mov    %ebx,%edx
  mov    %r12,%rsi
  mov    %r15,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  cmp    %ebp,%ebx
  jne    L141
L179:
  test   %r14d,%r14d
  jne    L17
L186:
  cmpl   $0x0,0x70(%rsp)
  jle    L174
  mov    0x80(%rsp),%rbx
  mov    0x70(%rsp),%eax
  lea    -0x1(%rax),%eax
  mov    %rax,0x20(%rsp)
  lea    0x4(%rbx,%rax,4),%r12
  mov    %ebp,0x2c(%rsp)
  mov    0x18(%rsp),%ebp
L157:
  mov    (%rbx),%edx
  test   %edx,%edx
  cmove  %ebp,%edx
  lea    D148(%rip),%rsi
  mov    %r15,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  add    $0x4,%rbx
  cmp    %r12,%rbx
  jne    L157
  mov    0x2c(%rsp),%ebp
  mov    %r15,%rcx
  mov    $0x12,%edx
  mov    $0x1,%esi
  lea    D152(%rip),%rdi
  call   <fwrite@plt>
  mov    0x78(%rsp),%rbx
  mov    0x20(%rsp),%rax
  shl    $0x4,%rax
  lea    0x10(%rbx,%rax,1),%r12
L142:
  mov    0xc(%rbx),%eax
  mov    0x8(%rbx),%edi
  lea    -0x1(%rdi),%ecx
  mov    0x4(%rbx),%edi
  lea    -0x1(%rdi),%edx
  mov    (%rbx),%edi
  lea    -0x1(%rdi),%esi
  lea    -0x1(%rax),%r8d
  mov    %r13,%rdi
  call   <aft_tetra_qual_mba@plt>
  mov    %eax,%edx
  lea    D101(%rip),%rsi
  mov    %r15,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  add    $0x10,%rbx
  cmp    %r12,%rbx
  jne    L142
L12:
  mov    %r15,%rcx
  mov    $0x9,%edx
  mov    $0x1,%esi
  lea    D107(%rip),%rdi
  call   <fwrite@plt>
  mov    %r15,%rcx
  mov    $0xb,%edx
  mov    $0x1,%esi
  lea    D15(%rip),%rdi
  call   <fwrite@plt>
  cmpl   $0x0,0x28(%rsp)
  jg     L160
  jmp    L80
L17:
  mov    %r15,%rcx
  mov    $0x8,%edx
  mov    $0x1,%esi
  lea    D111(%rip),%rdi
  call   <fwrite@plt>
  jmp    L186
L174:
  mov    %r15,%rcx
  mov    $0x12,%edx
  mov    $0x1,%esi
  lea    D152(%rip),%rdi
  call   <fwrite@plt>
  jmp    L12
```

tool_calls: name: retrieve_data
arguments: data_label: D143
data_type: string
name: retrieve_data
arguments: data_label: D74
data_type: string
name: retrieve_data
arguments: data_label: D51
data_type: string
name: retrieve_data
arguments: data_label: D203
data_type: string
name: retrieve_data
arguments: data_label: D171
data_type: string
name: retrieve_data
arguments: data_label: D15
data_type: string
name: retrieve_data
arguments: data_label: D206
data_type: string
name: retrieve_data
arguments: data_label: D159
data_type: string
name: retrieve_data
arguments: data_label: D43
data_type: string
name: retrieve_data
arguments: data_label: D24
data_type: string
name: retrieve_data
arguments: data_label: D133
data_type: string
name: retrieve_data
arguments: data_label: D27
data_type: string
name: retrieve_data
arguments: data_label: D161
data_type: string
name: retrieve_data
arguments: data_label: D148
data_type: string
name: retrieve_data
arguments: data_label: D152
data_type: string
name: retrieve_data
arguments: data_label: D101
data_type: string
name: retrieve_data
arguments: data_label: D107
data_type: string
name: retrieve_data
arguments: data_label: D111
data_type: string

tool: D143: w

tool: D74: gmvinput ascii

nodev %5d


tool: D51:   %20.15lf %20.15lf %20.15lf


tool: D203: 
cells %5d


tool: D171:  tet 4
  %4d %4d %4d %4d


tool: D15: 

polygons


tool: D206:       %20.15lf %20.15lf %20.15lf


tool: D159: %3d 3

tool: D43:  %20.15lf %20.15lf %20.15lf


tool: D24: endpoly


tool: D133: 
endgmv

tool: D27: 
material %d 0


tool: D161: mat%d


tool: D148:  %2d

tool: D152: 

variable
qual 0


tool: D101:  %20.15lf

tool: D107: 
endvars


tool: D111: unknown


assistant: ```c
int write_mesh_gmv_qual_mba(char *fn, int nV, double *vertex, int nF, int *face, int *facematerial, int nT, int *tetra, int *tetramaterial) {
  int i, mmax = 0, unkmat = 0;
  FILE *f;
  f = fopen(fn, "w");
  fprintf(f, "gmvinput ascii\n\nnodev %5d\n", nV);
  for (i = 0; i < nV; i++) {
    fprintf(f, "  %20.15lf %20.15lf %20.15lf\n", vertex[3 * i + 0], vertex[3 * i + 1], vertex[3 * i + 2]);
  }
  fprintf(f, "\ncells %5d\n", nT);
  for (i = 0; i < nT; i++) {
    fprintf(f, " tet 4\n  %4d %4d %4d %4d\n", tetra[4 * i + 0], tetra[4 * i + 1], tetra[4 * i + 2], tetra[4 * i + 3]);
    if (mmax < tetramaterial[i])
      mmax = tetramaterial[i];
    if (tetramaterial[i] == 0)
      unkmat = 1;
  }
  for (i = 0; i < nF; i++) {
    if (mmax < facematerial[i])
      mmax = facematerial[i];
    if (facematerial[i] == 0)
      unkmat = 1;
  }
  if (nT) {
    fprintf(f, "\nmaterial %d 0\n", mmax + unkmat);
    for (i = 0; i < mmax; i++)
      fprintf(f, "mat%d\n", i + 1);
    if (unkmat)
      fprintf(f, "unknown\n");
    for (i = 0; i < nT; i++) {
      fprintf(f, " %2d", (tetramaterial[i]) ? tetramaterial[i] : mmax + unkmat);
    }
    fprintf(f, "\n\nvariable\nqual 0\n");
    for (i = 0; i < nT; i++) {
      fprintf(f, " %20.15lf", aft_tetra_qual_mba(vertex, tetra[4 * i + 0] - 1, tetra[4 * i + 1] - 1, tetra[4 * i + 2] - 1, tetra[4 * i + 3] - 1));
    }
    fprintf(f, "\nendvars\n");
  }
  fprintf(f, "\n\npolygons\n");
  for (i = 0; i < nF; i++) {
    fprintf(f, "%3d 3", (facematerial[i]) ? facematerial[i] : mmax + unkmat);
    fprintf(f, " %20.15lf %20.15lf %20.15lf\n", vertex[3 * face[3 * i + 0] + 0 - 3], vertex[3 * face[3 * i + 1] + 0 - 3], vertex[3 * face[3 * i + 2] + 0 - 3]);
    fprintf(f, "      %20.15lf %20.15lf %20.15lf\n", vertex[3 * face[3 * i + 0] + 1 - 3], vertex[3 * face[3 * i + 1] + 1 - 3], vertex[3 * face[3 * i + 2] + 1 - 3]);
    fprintf(f, "      %20.15lf %20.15lf %20.15lf\n", vertex[3 * face[3 * i + 0] + 2 - 3], vertex[3 * face[3 * i + 1] + 2 - 3], vertex[3 * face[3 * i + 2] + 2 - 3]);
  }
  fprintf(f, "endpoly\n");
  fprintf(f, "\nendgmv");
  fclose(f);
  return 0;
}
```