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
  mov    -0x60(%rbp),%rax
  mov    0x8(%rax),%rax
  mov    %rax,-0x30(%rbp)
  mov    -0x60(%rbp),%rax
  mov    0x10(%rax),%rax
  mov    %rax,-0x28(%rbp)
  mov    -0x30(%rbp),%rax
  lea    D13(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fopen@plt>
  mov    %rax,-0x20(%rbp)
  mov    $0x100,%edi
  call   <malloc@plt>
  mov    %rax,-0x48(%rbp)
  lea    D28(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x38(%rbp)
L52:
  movq   $0x100,-0x40(%rbp)
  mov    -0x20(%rbp),%rdx
  lea    -0x40(%rbp),%rcx
  lea    -0x48(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <getline@plt>
  test   %eax,%eax
  jg     L14
  mov    -0x20(%rbp),%rax
  mov    %rax,%rdi
  call   <fclose@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L25
  jmp    L72
L14:
  mov    -0x48(%rbp),%rax
  mov    $0x28,%esi
  mov    %rax,%rdi
  call   <strchr@plt>
  mov    %rax,-0x18(%rbp)
  cmpq   $0x0,-0x18(%rbp)
  je     L67
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <atof@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x10(%rbp)
  addq   $0x1,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  mov    $0x10,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <strtol@plt>
  mov    %eax,-0x50(%rbp)
  mov    -0x18(%rbp),%rax
  mov    $0x28,%esi
  mov    %rax,%rdi
  call   <strchr@plt>
  mov    %rax,-0x18(%rbp)
  cmpq   $0x0,-0x18(%rbp)
  je     L20
  mov    -0x18(%rbp),%rax
  add    $0x1,%rax
  mov    $0x10,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <strtol@plt>
  mov    %eax,-0x4c(%rbp)
  movsd  -0x10(%rbp),%xmm0
  subsd  -0x38(%rbp),%xmm0
  comisd D15(%rip),%xmm0
  jbe    L45
  mov    $0xa,%edi
  call   <putchar@plt>
L45:
  mov    -0x4c(%rbp),%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x50(%rbp),%eax
  sar    %eax
  mov    %eax,%ecx
  mov    -0x10(%rbp),%rax
  mov    %ecx,%esi
  movq   %rax,%xmm0
  lea    D29(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  jmp    L52
L67:
  nop
  jmp    L52
L20:
  nop
  jmp    L52
L72:
  call   <__stack_chk_fail@plt>
L25:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D13
type: string
name: extract_symbolic_data
arguments: data_label: D28
type: string
name: extract_symbolic_data
arguments: data_label: D15
type: f64
name: extract_symbolic_data
arguments: data_label: D29
type: string

tool: D13: r

tool: D28: # time   MOSI  MISO

tool: D15: 0.001

tool: D29: %7.5f  %.2x  %.2x


assistant: ```c
int main(int argc, char **argv) {
  char *inm = argv[1], *onm = argv[2];
  FILE *fin = fopen(inm, "r");
  char *buf = malloc(256);
  printf("# time   MOSI  MISO\n");
  double told = 0.;
  do {
    size_t len = 256;
    if (getline(&buf, &len, fin) < 1)
      break;
    char *brace;
    if (!(brace = strchr(buf, '(')))
      continue;
    double t;
    int mosi, miso;
    t = atof(buf);
    ++brace;
    mosi = strtol(brace, NULL, 16);
    if (!(brace = strchr(brace, '(')))
      continue;
    miso = strtol(brace + 1, NULL, 16);
    if (t - told > 0.001)
      printf("\n");
    printf("%7.5f  %.2x  %.2x\n", t, mosi >> 1, miso >> 1);
    told = t;
  } while (1);
  fclose(fin);
}
```