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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %edi,-0x54(%rbp)
  mov    %rsi,-0x60(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  cmpl   $0x7,-0x54(%rbp)
  je     L34
  lea    D86(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0x0,%edi
  call   <exit@plt>
L34:
  mov    -0x60(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  lea    D8(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fopen@plt>
  mov    %rax,-0x20(%rbp)
  mov    -0x60(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  lea    D117(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fopen@plt>
  mov    %rax,-0x18(%rbp)
  mov    -0x60(%rbp),%rax
  add    $0x30,%rax
  mov    (%rax),%rax
  lea    D117(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fopen@plt>
  mov    %rax,-0x10(%rbp)
  mov    -0x60(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%rax
  lea    -0x40(%rbp),%rdx
  lea    D76(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sscanf@plt>
  mov    -0x60(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%rax
  lea    -0x3c(%rbp),%rdx
  lea    D76(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sscanf@plt>
  mov    -0x60(%rbp),%rax
  add    $0x28,%rax
  mov    (%rax),%rax
  lea    -0x48(%rbp),%rdx
  lea    D76(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sscanf@plt>
  mov    -0x40(%rbp),%edx
  mov    -0x3c(%rbp),%eax
  cmp    %eax,%edx
  jle    L68
  lea    D73(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0x0,%edi
  call   <exit@plt>
L68:
  movl   $0x0,-0x30(%rbp)
  movl   $0x0,-0x34(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x2c(%rbp)
  mov    -0x40(%rbp),%eax
  mov    %eax,-0x28(%rbp)
  jmp    L90
L17:
  movl   $0x1,-0x24(%rbp)
  jmp    L58
L12:
  addl   $0x1,-0x30(%rbp)
  movl   $0x0,-0x38(%rbp)
  jmp    L48
L91:
  lea    -0x44(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  lea    D75(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <fscanf@plt>
  movss  -0x44(%rbp),%xmm0
  comiss -0x2c(%rbp),%xmm0
  jbe    L3
  movss  -0x44(%rbp),%xmm0
  movss  %xmm0,-0x2c(%rbp)
L3:
  addl   $0x1,-0x38(%rbp)
L48:
  mov    -0x48(%rbp),%eax
  cmp    %eax,-0x38(%rbp)
  jl     L91
  addl   $0x1,-0x24(%rbp)
L58:
  cmpl   $0xc,-0x24(%rbp)
  jle    L12
  pxor   %xmm1,%xmm1
  cvtss2sd -0x2c(%rbp),%xmm1
  movq   %xmm1,%rdx
  mov    -0x18(%rbp),%rax
  movq   %rdx,%xmm0
  lea    D112(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <fprintf@plt>
  mov    -0x18(%rbp),%rax
  mov    %rax,%rsi
  mov    $0xa,%edi
  call   <fputc@plt>
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x2c(%rbp)
  addl   $0x1,-0x34(%rbp)
  addl   $0x1,-0x28(%rbp)
L90:
  mov    -0x3c(%rbp),%eax
  cmp    %eax,-0x28(%rbp)
  jle    L17
  mov    -0x30(%rbp),%eax
  mov    %eax,%esi
  lea    D80(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x34(%rbp),%edx
  mov    -0x10(%rbp),%rax
  lea    D25(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L70
  call   <__stack_chk_fail@plt>
L70:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: tag: D86
datatype: string
name: unpack_data
arguments: tag: D8
datatype: string
name: unpack_data
arguments: tag: D117
datatype: string
name: unpack_data
arguments: tag: D76
datatype: string
name: unpack_data
arguments: tag: D73
datatype: string
name: unpack_data
arguments: tag: D75
datatype: string
name: unpack_data
arguments: tag: D112
datatype: string
name: unpack_data
arguments: tag: D80
datatype: string
name: unpack_data
arguments: tag: D25
datatype: string

tool: D86: Wrong command line arguments: enter <infile> <outfile> <startyear> <endyear> <numcells > .

tool: D8: r

tool: D117: w

tool: D76: %d

tool: D73: Startyear and endyear improperly  defined.

tool: D75: %f

tool: D112:  %5.4f 

tool: D80: Done.
Number of daily timesteps processed = %d.


tool: D25: %d.

assistant: ```c
main(int argc, char *argv[]) {
  int i, j, k, m, n, numsteps, numdata, numcells, numtoread, skip;
  int flag, datatype;
  float Max, tmp;
  FILE *filelist, *inputfile, *outputfile, *workfile, *outputnr;
  int year, nmth, startyear, endyear, yrday;
  if (argc != 7) {
    printf("Wrong command line arguments: enter <infile> <outfile> <startyear> <endyear> <numcells > .\n");
    exit(0);
  }
  inputfile = fopen(argv[1], "r");
  outputfile = fopen(argv[2], "w");
  outputnr = fopen(argv[6], "w");
  sscanf(argv[3], "%d", &startyear);
  sscanf(argv[4], "%d", &endyear);
  sscanf(argv[5], "%d", &numcells);
  if (startyear > endyear) {
    printf("Startyear and endyear improperly  defined.\n");
    exit(0);
  }
  n = 0;
  m = 0;
  Max = 0;
  for (year = startyear; year <= endyear; year++) {
    for (nmth = 1; nmth <= 12; nmth++) {
      n++;
      for (i = 0; i < numcells; i++) {
        fscanf(inputfile, "%f", &tmp);
        if (Max < tmp)
          Max = tmp;
      }
    }
    fprintf(outputfile, " %5.4f ", Max);
    fprintf(outputfile, "\n");
    Max = 0;
    m++;
  }
  printf("Done.\nNumber of daily timesteps processed = %d.\n", n);
  fprintf(outputnr, "%d.", m);
}
```