user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xa0,%rsp
  mov    %edi,-0x94(%rbp)
  mov    %rsi,-0xa0(%rbp)
  cmpl   $0x2,-0x94(%rbp)
  jne    L20
  mov    -0xa0(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  lea    D143(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L20
  lea    D186(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D118(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D19(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D36(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D57(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D106(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D158(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D2(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D71(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D251(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D240(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D267(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D72(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D206(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%edi
  call   <exit@plt>
  jmp    L177
L20:
  cmpl   $0xa,-0x94(%rbp)
  je     L121
  lea    D244(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D20(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D254(%rip),%rax
  mov    %rax,%rdi
  call   <errorHandler@plt>
  jmp    L177
L121:
  mov    -0xa0(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %eax,-0x78(%rbp)
  mov    -0xa0(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %eax,-0x74(%rbp)
  mov    -0xa0(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %eax,-0x70(%rbp)
  mov    -0xa0(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <atof@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x50(%rbp)
  mov    -0xa0(%rbp),%rax
  add    $0x28,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <atof@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x48(%rbp)
  mov    -0xa0(%rbp),%rax
  add    $0x30,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <atof@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x40(%rbp)
  mov    -0xa0(%rbp),%rax
  add    $0x38,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <atof@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x38(%rbp)
  mov    -0xa0(%rbp),%rax
  add    $0x40,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <atof@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x30(%rbp)
  mov    -0xa0(%rbp),%rax
  add    $0x48,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <atof@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x28(%rbp)
L177:
  lea    D126(%rip),%rax
  mov    %rax,%rsi
  lea    D16(%rip),%rax
  mov    %rax,%rdi
  call   <fopen@plt>
  mov    %rax,-0x20(%rbp)
  cmpq   $0x0,-0x20(%rbp)
  jne    L30
  lea    D1(%rip),%rax
  mov    %rax,%rdi
  call   <errorHandler@plt>
L30:
  cmpl   $0x1,-0x78(%rbp)
  jne    L35
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x68(%rbp)
  jmp    L49
L35:
  movsd  -0x48(%rbp),%xmm0
  subsd  -0x50(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x78(%rbp),%xmm1
  movsd  D29(%rip),%xmm2
  subsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x68(%rbp)
L49:
  cmpl   $0x1,-0x74(%rbp)
  jne    L0
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x60(%rbp)
  jmp    L171
L0:
  movsd  -0x38(%rbp),%xmm0
  subsd  -0x40(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x74(%rbp),%xmm1
  movsd  D29(%rip),%xmm2
  subsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x60(%rbp)
L171:
  cmpl   $0x1,-0x70(%rbp)
  jne    L42
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x58(%rbp)
  jmp    L164
L42:
  movsd  -0x28(%rbp),%xmm0
  subsd  -0x30(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x70(%rbp),%xmm1
  movsd  D29(%rip),%xmm2
  subsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x58(%rbp)
L164:
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x70(%rbp),%xmm0
  pxor   %xmm3,%xmm3
  cvtsi2sdl -0x74(%rbp),%xmm3
  movq   %xmm3,%rcx
  mov    -0x78(%rbp),%edx
  mov    -0x20(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rcx,%xmm0
  lea    D167(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x2,%eax
  call   <fprintf@plt>
  movsd  -0x68(%rbp),%xmm0
  cvttsd2si %xmm0,%edx
  movsd  -0x58(%rbp),%xmm0
  mov    -0x60(%rbp),%rcx
  mov    -0x20(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rcx,%xmm0
  lea    D39(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x2,%eax
  call   <fprintf@plt>
  movl   $0x1,-0x6c(%rbp)
  movl   $0x0,-0x7c(%rbp)
  jmp    L40
L82:
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x7c(%rbp),%xmm0
  mulsd  -0x58(%rbp),%xmm0
  movsd  -0x30(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movl   $0x0,-0x80(%rbp)
  jmp    L151
L47:
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x80(%rbp),%xmm0
  mulsd  -0x60(%rbp),%xmm0
  movsd  -0x40(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movl   $0x0,-0x84(%rbp)
  jmp    L38
L64:
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x84(%rbp),%xmm0
  mulsd  -0x68(%rbp),%xmm0
  movsd  -0x50(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x18(%rbp),%xmm1
  movsd  -0x10(%rbp),%xmm0
  mov    -0x8(%rbp),%rcx
  mov    -0x6c(%rbp),%edx
  mov    -0x20(%rbp),%rax
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rcx,%xmm0
  lea    D178(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x3,%eax
  call   <fprintf@plt>
  addl   $0x1,-0x6c(%rbp)
  addl   $0x1,-0x84(%rbp)
L38:
  mov    -0x84(%rbp),%eax
  cmp    -0x78(%rbp),%eax
  jl     L64
  addl   $0x1,-0x80(%rbp)
L151:
  mov    -0x80(%rbp),%eax
  cmp    -0x74(%rbp),%eax
  jl     L47
  addl   $0x1,-0x7c(%rbp)
L40:
  mov    -0x7c(%rbp),%eax
  cmp    -0x70(%rbp),%eax
  jl     L82
  mov    -0x20(%rbp),%rax
  mov    %rax,%rdi
  call   <fclose@plt>
  mov    $0x0,%eax
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D143
type: string
name: parse_data
arguments: data_tag: D186
type: string
name: parse_data
arguments: data_tag: D118
type: string
name: parse_data
arguments: data_tag: D19
type: string
name: parse_data
arguments: data_tag: D36
type: string
name: parse_data
arguments: data_tag: D57
type: string
name: parse_data
arguments: data_tag: D106
type: string
name: parse_data
arguments: data_tag: D158
type: string
name: parse_data
arguments: data_tag: D2
type: string
name: parse_data
arguments: data_tag: D71
type: string
name: parse_data
arguments: data_tag: D251
type: string
name: parse_data
arguments: data_tag: D240
type: string
name: parse_data
arguments: data_tag: D267
type: string
name: parse_data
arguments: data_tag: D72
type: string
name: parse_data
arguments: data_tag: D206
type: string
name: parse_data
arguments: data_tag: D244
type: string
name: parse_data
arguments: data_tag: D20
type: string
name: parse_data
arguments: data_tag: D254
type: string
name: parse_data
arguments: data_tag: D126
type: string
name: parse_data
arguments: data_tag: D16
type: string
name: parse_data
arguments: data_tag: D1
type: string
name: parse_data
arguments: data_tag: D29
type: f64
name: parse_data
arguments: data_tag: D167
type: string
name: parse_data
arguments: data_tag: D39
type: string
name: parse_data
arguments: data_tag: D178
type: string

tool: D143: -h

tool: D186: 

SYNTAX:
meshgen-vtk nx ny nz xmin xmax ymin ymax 

tool: D118: zmin zmax



tool: D19: DESCRIPTION


tool: D36: Generates a regular 3d cartesian grid with limits 

tool: D57: [(xmin,xmax),(ymin,ymax),
(zmin,zmax)] and saves the 

tool: D106: coordinates to the file 'mesh.dat'. The first
two lines 

tool: D158: of the file contain the total number of points and the 

tool: D2: interval
between two consecutive points for each of the 

tool: D71: three spatial directions.
Line numbers are always saved 

tool: D251: to the output file.



tool: D240: EXAMPLE


tool: D267: meshgen-vtk 10 10 20 -50 50 -10 10 -5 5



tool: D72: Produces a mesh in the volume [(-50,50):(-10,10):(-5,5)] 

tool: D206: with a total
of 2000 points (10x10x20).



tool: D244: 

Error: Incorrect syntax.



tool: D20: Try: meshgen-vtk nx ny nz xmin xmax ymin ymax zmin zmax


tool: D254: or type 'meshgen-vtk -h' for help.


tool: D126: w

tool: D16: mesh.bem

tool: D1: Error: Can't create output file mesh.dat

tool: D29: 1

tool: D167: %d	%d	%d


tool: D39: %le	%le	%le


tool: D178: %d	%le	%le	%le


assistant: ```c
int main(int argc, char *argv[]) {
  FILE *fout;
  int i, j, k, nx, ny, nz, count;
  double dx, dy, dz, r, x, xmin, xmax, y, ymin, ymax, z, zmin, zmax;
  if (argc == 2 && strcmp(argv[1], "-h") == 0) {
    printf("\n\nSYNTAX:\nmeshgen-vtk nx ny nz xmin xmax ymin ymax ");
    printf("zmin zmax\n\n");
    printf("DESCRIPTION\n");
    printf("Generates a regular 3d cartesian grid with limits ");
    printf("[(xmin,xmax),(ymin,ymax),\n(zmin,zmax)] and saves the ");
    printf("coordinates to the file 'mesh.dat'. The first\ntwo lines ");
    printf("of the file contain the total number of points and the ");
    printf("interval\nbetween two consecutive points for each of the ");
    printf("three spatial directions.\nLine numbers are always saved ");
    printf("to the output file.\n\n");
    printf("EXAMPLE\n");
    printf("meshgen-vtk 10 10 20 -50 50 -10 10 -5 5\n\n");
    printf("Produces a mesh in the volume [(-50,50):(-10,10):(-5,5)] ");
    printf("with a total\nof 2000 points (10x10x20).\n\n");
    exit(0);
  } else if (argc != 10) {
    printf("\n\nError: Incorrect syntax.\n\n");
    printf("Try: meshgen-vtk nx ny nz xmin xmax ymin ymax zmin zmax\n");
    errorHandler("or type 'meshgen-vtk -h' for help.\n");
  } else {
    nx = atoi(argv[1]);
    ny = atoi(argv[2]);
    nz = atoi(argv[3]);
    xmin = atof(argv[4]);
    xmax = atof(argv[5]);
    ymin = atof(argv[6]);
    ymax = atof(argv[7]);
    zmin = atof(argv[8]);
    zmax = atof(argv[9]);
  }
  if ((fout = fopen("mesh.bem", "w")) == NULL)
    errorHandler("Error: Can't create output file mesh.dat");
  if (nx == 1)
    dx = 0.0;
  else
    dx = (xmax - xmin) / ((double)nx - 1.0);
  if (ny == 1)
    dy = 0.0;
  else
    dy = (ymax - ymin) / ((double)ny - 1.0);
  if (nz == 1)
    dz = 0.0;
  else
    dz = (zmax - zmin) / ((double)nz - 1.0);
  fprintf(fout, "%d\t%d\t%d\n", nx, ny, nz);
  fprintf(fout, "%le\t%le\t%le\n", dx, dy, dz);
  count = 1;
  for (k = 0; k < nz; k++) {
    z = zmin + k * dz;
    for (j = 0; j < ny; j++) {
      y = ymin + j * dy;
      for (i = 0; i < nx; i++) {
        x = xmin + i * dx;
        fprintf(fout, "%d\t%le\t%le\t%le\n", count, x, y, z);
        count++;
      }
    }
  }
  fclose(fout);
  return 0;
}
```