user: 提供的汇编代码用C语言表示会是什么样子:

```asm
<get_next_tle_time>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %rdi,-0x38(%rbp)
  mov    %rsi,-0x40(%rbp)
  mov    %rdx,-0x48(%rbp)
  mov    %rcx,-0x50(%rbp)
  mov    %r8,-0x58(%rbp)
  mov    %r9,-0x60(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x100,-0x2c(%rbp)
  movl   $0x0,-0x30(%rbp)
  movq   $0x5265c00,-0x20(%rbp)
  mov    -0x38(%rbp),%rdx
  mov    -0x2c(%rbp),%ecx
  mov    -0x58(%rbp),%rax
  mov    %ecx,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  jne    L5
  lea    D42(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L5:
  mov    -0x58(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x31,%al
  je     L32
  lea    D42(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L32:
  mov    -0x38(%rbp),%rdx
  mov    -0x2c(%rbp),%ecx
  mov    -0x60(%rbp),%rax
  mov    %ecx,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  jne    L2
  lea    D42(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L2:
  mov    -0x60(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x32,%al
  je     L6
  lea    D42(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L6:
  lea    -0x28(%rbp),%rdi
  lea    -0xf(%rbp),%rsi
  lea    -0x16(%rbp),%rcx
  lea    -0x30(%rbp),%rdx
  mov    -0x58(%rbp),%rax
  mov    %rdi,%r9
  mov    %rsi,%r8
  lea    D8(%rip),%rsi
  mov    %rax,%rdi
  call   <sscanf@plt>
  movsd  -0x28(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  movslq %eax,%rdx
  imul   $0x10624dd3,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x6,%edx
  sar    $0x1f,%eax
  sub    %eax,%edx
  mov    -0x40(%rbp),%rax
  mov    %edx,(%rax)
  movsd  -0x28(%rbp),%xmm0
  mov    -0x40(%rbp),%rax
  mov    (%rax),%eax
  imul   $0x3e8,%eax,%eax
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  subsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%edx
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
  movsd  -0x28(%rbp),%xmm0
  mov    -0x40(%rbp),%rax
  mov    (%rax),%eax
  imul   $0x3e8,%eax,%eax
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  subsd  %xmm1,%xmm0
  mov    -0x48(%rbp),%rax
  mov    (%rax),%eax
  pxor   %xmm2,%xmm2
  cvtsi2sd %eax,%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2sdq -0x20(%rbp),%xmm0
  mulsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%edx
  mov    -0x50(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x40(%rbp),%rax
  mov    (%rax),%eax
  lea    0x76c(%rax),%edx
  mov    -0x40(%rbp),%rax
  mov    %edx,(%rax)
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L29
  call   <__stack_chk_fail@plt>
L29:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D42
data_type: string
name: extract_symbolic_data
arguments: data_tag: D8
data_type: string

tool: D42: ERROR:bad get from tle file


tool: D8: %1i %s %s %lf

assistant: ```c
void get_next_tle_time(FILE *fpin, int *this_year, int *this_day, int *this_msec, char *line1, char *line2) {
  int max = 256;
  int line_no = 0;
  char tmp1[7];
  char tmp2[7];
  double full_time;
  long msec_per_day = 24 * 60 * 60 * 1000;
  if (fgets(line1, max, fpin) == NULL) {
    printf("ERROR:bad get from tle file\n");
    exit(1);
  }
  if (line1[0] != '1') {
    printf("ERROR:bad get from tle file\n");
    exit(1);
  }
  if (fgets(line2, max, fpin) == NULL) {
    printf("ERROR:bad get from tle file\n");
    exit(1);
  }
  if (line2[0] != '2') {
    printf("ERROR:bad get from tle file\n");
    exit(1);
  }
  sscanf(line1, "%1i %s %s %lf", &line_no, tmp1, tmp2, &full_time);
  *this_year = (int)full_time / 1000;
  *this_day = (int)(full_time - (*this_year * 1000));
  *this_msec = (int)((full_time - (*this_year * 1000) - *this_day) * msec_per_day);
  *this_year = *this_year + 1900;
}
```