user: 请将以下的汇编代码转换成C语言代码:

```asm
<main>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x648,%rsp
  mov    %rsi,%rbx
  mov    %fs:0x28,%rax
  mov    %rax,0x638(%rsp)
  xor    %eax,%eax
  movl   $0x1e,0x20(%rsp)
  movl   $0x3c,0x24(%rsp)
  movl   $0x5b,0x28(%rsp)
  movl   $0x7a,0x2c(%rsp)
  movl   $0x96,0x30(%rsp)
  movl   $0xb5,0x34(%rsp)
  movl   $0xd3,0x38(%rsp)
  movl   $0xf2,0x3c(%rsp)
  movl   $0x110,0x40(%rsp)
  movl   $0x12f,0x44(%rsp)
  movl   $0x14e,0x48(%rsp)
  movl   $0x16c,0x4c(%rsp)
  movl   $0x1e,0x50(%rsp)
  movl   $0x3c,0x54(%rsp)
  movl   $0x5b,0x58(%rsp)
  movl   $0x7a,0x5c(%rsp)
  movl   $0x97,0x60(%rsp)
  movl   $0xb6,0x64(%rsp)
  movl   $0xd4,0x68(%rsp)
  movl   $0xf3,0x6c(%rsp)
  movl   $0x111,0x70(%rsp)
  movl   $0x130,0x74(%rsp)
  movl   $0x14f,0x78(%rsp)
  movl   $0x16d,0x7c(%rsp)
  cmp    $0x5,%edi
  jne    L69
L20:
  mov    0x8(%rbx),%rdi
  lea    D78(%rip),%rsi
  call   <fopen@plt>
  mov    %rax,0x8(%rsp)
  mov    0x10(%rbx),%rdi
  lea    D108(%rip),%rsi
  call   <fopen@plt>
  mov    %rax,%r13
  lea    0x18(%rsp),%rdx
  mov    0x18(%rbx),%rdi
  lea    D61(%rip),%rbp
  mov    %rbp,%rsi
  call   <sscanf@plt>
  lea    0x1c(%rsp),%rdx
  mov    0x20(%rbx),%rdi
  mov    %rbp,%rsi
  call   <sscanf@plt>
  mov    0x18(%rsp),%ebp
  mov    $0x0,%ebx
  mov    $0x0,%r14d
  jmp    L115
L69:
  lea    D65(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%edi
  call   <exit@plt>
  jmp    L20
L44:
  cltq
  movss  0x80(%rsp,%rax,4),%xmm2
  movaps %xmm2,%xmm1
  mulss  D11(%rip),%xmm1
  addss  %xmm0,%xmm1
  mulss  D32(%rip),%xmm1
  movss  %xmm1,0x80(%rsp,%rax,4)
  movslq %ebx,%rax
  movss  0x80(%rsp,%rax,4),%xmm0
  mulss  D11(%rip),%xmm0
  addss  %xmm2,%xmm0
  mulss  D32(%rip),%xmm0
  movss  %xmm0,0x80(%rsp,%rax,4)
  add    $0x1,%r14d
  mov    $0x16c,%r12d
  jmp    L126
L83:
  add    $0x1,%ebp
  lea    0x80(%rsp),%rbx
  mov    %r12d,%eax
  lea    0x84(%rsp,%rax,4),%r15
  lea    D109(%rip),%r14
L130:
  movss  (%rbx),%xmm0
  mov    %r14,%rsi
  mov    %r13,%rdi
  call   <fprintf@plt>
  add    $0x4,%rbx
  cmp    %r15,%rbx
  jne    L130
  mov    $0xffffffff,%ebx
  mov    $0x0,%r14d
  jmp    L88
L60:
  mov    0x638(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L24
  mov    $0x0,%eax
  add    $0x648,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L110:
  lea    0x14(%rsp),%rdx
  lea    D129(%rip),%rsi
  mov    0x8(%rsp),%rdi
  call   <fscanf@plt>
  movss  0x14(%rsp),%xmm0
  movslq %ebx,%rax
  movss  %xmm0,0x80(%rsp,%rax,4)
  movslq %r14d,%rax
  mov    0x20(%rsp,%rax,4),%eax
  lea    0x1(%rax),%edx
  mov    $0x16c,%r12d
  cmp    %ebx,%edx
  je     L44
L126:
  cmp    %r12d,%ebx
  je     L83
L88:
  add    $0x1,%ebx
L115:
  cmp    %r12d,%ebx
  jl     L95
  cmp    %ebp,0x1c(%rsp)
  jl     L60
L95:
  test   $0x3,%bpl
  jne    L110
  movslq %ebp,%rax
  imul   $0x51eb851f,%rax,%rax
  sar    $0x25,%rax
  mov    %ebp,%edx
  sar    $0x1f,%edx
  sub    %edx,%eax
  imul   $0x64,%eax,%eax
  cmp    %eax,%ebp
  jne    L139
  movslq %ebp,%rax
  imul   $0x51eb851f,%rax,%rax
  sar    $0x27,%rax
  mov    %ebp,%edx
  sar    $0x1f,%edx
  sub    %edx,%eax
  imul   $0x190,%eax,%eax
  cmp    %eax,%ebp
  jne    L110
L139:
  movl   $0x98,0x30(%rsp)
  lea    0x14(%rsp),%rdx
  lea    D129(%rip),%rsi
  mov    0x8(%rsp),%rdi
  call   <fscanf@plt>
  movss  0x14(%rsp),%xmm0
  movslq %ebx,%rax
  movss  %xmm0,0x80(%rsp,%rax,4)
  movslq %r14d,%rax
  mov    0x50(%rsp,%rax,4),%eax
  lea    0x1(%rax),%edx
  mov    $0x16d,%r12d
  cmp    %ebx,%edx
  jne    L126
  cltq
  movss  0x80(%rsp,%rax,4),%xmm3
  movaps %xmm3,%xmm1
  mulss  D11(%rip),%xmm1
  addss  %xmm0,%xmm1
  movss  D32(%rip),%xmm2
  mulss  %xmm2,%xmm1
  movss  %xmm1,0x80(%rsp,%rax,4)
  movslq %ebx,%rax
  movss  0x80(%rsp,%rax,4),%xmm0
  mulss  D11(%rip),%xmm0
  addss  %xmm3,%xmm0
  mulss  %xmm2,%xmm0
  movss  %xmm0,0x80(%rsp,%rax,4)
  add    $0x1,%r14d
  jmp    L126
L24:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: tag: D78
type_infered: string
name: unpack_data
arguments: tag: D108
type_infered: string
name: unpack_data
arguments: tag: D61
type_infered: string
name: unpack_data
arguments: tag: D65
type_infered: string
name: unpack_data
arguments: tag: D11
type_infered: byte[4]
name: unpack_data
arguments: tag: D32
type_infered: byte[4]
name: unpack_data
arguments: tag: D109
type_infered: string
name: unpack_data
arguments: tag: D129
type_infered: string

tool: D78: r

tool: D108: w

tool: D61: %d

tool: D65: Wrong command line arguments: enter <bcdfile> <outfile> <startyear> <endyear> ,


tool: {"D11": [0x00,0x00,0x40,0x40]}

tool: {"D32": [0x00,0x00,0x80,0x3e]}

tool: D109: %10.3f


tool: D129: %f

assistant: ```c
int main(int argc, char *argv[]) {
  FILE *rawfile, *rawccfile, *bcdfile, *outfile;
  float tmp, sum1, sum2, sum3, sum4, data, bcmdata[35];
  int i, j, k, n, day, mnth, year, nday, startwy, endwy, unitsw, DayYear;
  int dpm[12] = {31, 30, 31, 31, 28, 31, 30, 31, 30, 31, 31, 30};
  int tdeom[12] = {30, 60, 91, 122, 150, 181, 211, 242, 272, 303, 334, 364};
  int tdeoml[12] = {30, 60, 91, 122, 151, 182, 212, 243, 273, 304, 335, 365};
  float temp[4] = {0, 0, 0, 0};
  int leap = 0;
  if (argc != 5) {
    printf("Wrong command line arguments: enter <bcdfile> <outfile> <startyear> <endyear> ,\n");
    exit(0);
  }
  bcdfile = fopen(argv[1], "r");
  outfile = fopen(argv[2], "w");
  sscanf(argv[3], "%d", &startwy);
  sscanf(argv[4], "%d", &endwy);
  n = 0;
  i = 0;
  year = startwy;
  float OneYear[366];
  int EndJuly;
  while (n < DayYear || year <= endwy) {
    if ((year % 4 == 0) && (((year % 100 == 0) && (year % 400 != 0)) == 0)) {
      dpm[4] = 29;
      tdeom[4] = 152;
      DayYear = 365;
      leap = 1;
    } else {
      DayYear = 364;
      leap = 0;
    }
    fscanf(bcdfile, "%f", &tmp);
    OneYear[n] = tmp;
    if (leap == 1) {
      if (n == tdeoml[i] + 1) {
        float temp = OneYear[tdeoml[i]];
        OneYear[tdeoml[i]] = (3 * OneYear[tdeoml[i]] + OneYear[tdeoml[i] + 1]) / 4;
        OneYear[tdeoml[i] + 1] = (temp + 3 * OneYear[tdeoml[i] + 1]) / 4;
        i++;
      }
    } else {
      if (n == tdeom[i] + 1) {
        float temp = OneYear[tdeom[i]];
        OneYear[tdeom[i]] = (3 * OneYear[tdeom[i]] + OneYear[tdeom[i] + 1]) / 4;
        OneYear[tdeom[i] + 1] = (temp + 3 * OneYear[tdeom[i] + 1]) / 4;
        i++;
      }
    }
    if (n == DayYear) {
      year++;
      n = -1;
      i = 0;
      for (j = 0; j <= DayYear; j++) {
        fprintf(outfile, "%10.3f\n", OneYear[j]);
      }
    }
    n++;
  }
}
```