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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x168,%rsp
  mov    %edi,-0x164(%rbp)
  mov    %rsi,-0x170(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  mov    -0x170(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  lea    D99(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fopen@plt>
  mov    %rax,-0x150(%rbp)
  mov    -0x150(%rbp),%rax
  mov    %rax,%rdi
  call   <assert@plt>
  movl   $0x0,-0x15c(%rbp)
  jmp    L80
L119:
  mov    -0x150(%rbp),%rdx
  lea    -0x140(%rbp),%rax
  mov    $0x5a,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  je     L61
  lea    -0x140(%rbp),%rax
  mov    %rax,%rdi
  call   <atof@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x148(%rbp)
  cmpl   $0x9,-0x15c(%rbp)
  jg     L61
  cmpl   $0x7,-0x15c(%rbp)
  jge    L94
  cmpl   $0x6,-0x15c(%rbp)
  jg     L61
  cmpl   $0x4,-0x15c(%rbp)
  jge    L118
  cmpl   $0x2,-0x15c(%rbp)
  je     L117
  cmpl   $0x3,-0x15c(%rbp)
  je     L96
  jmp    L61
L117:
  movsd  -0x148(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,-0x154(%rbp)
  mov    -0x154(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x51eb851f,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x5,%edx
  mov    %eax,%esi
  sar    $0x1f,%esi
  mov    %edx,%ecx
  sub    %esi,%ecx
  imul   $0x64,%ecx,%edx
  sub    %edx,%eax
  mov    %eax,%ecx
  mov    -0x154(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x51eb851f,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x5,%edx
  sar    $0x1f,%eax
  sub    %eax,%edx
  movslq %edx,%rax
  imul   $0x51eb851f,%rax,%rax
  shr    $0x20,%rax
  sar    $0x5,%eax
  mov    %edx,%esi
  sar    $0x1f,%esi
  sub    %esi,%eax
  imul   $0x64,%eax,%esi
  mov    %edx,%eax
  sub    %esi,%eax
  mov    -0x154(%rbp),%edx
  movslq %edx,%rsi
  imul   $0x68db8bad,%rsi,%rsi
  shr    $0x20,%rsi
  sar    $0xc,%esi
  mov    %edx,%edi
  sar    $0x1f,%edi
  sub    %edi,%esi
  mov    %esi,%edx
  lea    -0x140(%rbp),%rdi
  mov    %ecx,%r8d
  mov    %eax,%ecx
  lea    D113(%rip),%rax
  mov    %rax,%rsi
  mov    $0x0,%eax
  call   <sprintf@plt>
  lea    -0x140(%rbp),%rax
  mov    %rax,%rsi
  lea    D135(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x140(%rbp),%rdx
  lea    -0xe0(%rbp),%rax
  lea    D32(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L61
L96:
  movsd  -0x148(%rbp),%xmm1
  movsd  D76(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,-0x158(%rbp)
  mov    -0x158(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x51eb851f,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x5,%edx
  mov    %eax,%ecx
  sar    $0x1f,%ecx
  mov    %edx,%esi
  sub    %ecx,%esi
  imul   $0x64,%esi,%edx
  sub    %edx,%eax
  mov    %eax,%esi
  mov    -0x158(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x10624dd3,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x6,%edx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  movslq %eax,%rdx
  imul   $0x51eb851f,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x5,%edx
  mov    %eax,%edi
  sar    $0x1f,%edi
  mov    %edx,%ecx
  sub    %edi,%ecx
  imul   $0x64,%ecx,%edx
  sub    %edx,%eax
  mov    %eax,%ecx
  mov    -0x158(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x14f8b589,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0xd,%edx
  sar    $0x1f,%eax
  sub    %eax,%edx
  movslq %edx,%rax
  imul   $0x51eb851f,%rax,%rax
  shr    $0x20,%rax
  sar    $0x5,%eax
  mov    %edx,%edi
  sar    $0x1f,%edi
  sub    %edi,%eax
  imul   $0x64,%eax,%edi
  mov    %edx,%eax
  sub    %edi,%eax
  mov    -0x158(%rbp),%edx
  movslq %edx,%rdi
  imul   $0x6b5fca6b,%rdi,%rdi
  shr    $0x20,%rdi
  sar    $0x16,%edi
  sar    $0x1f,%edx
  mov    %edx,%r8d
  sub    %r8d,%edi
  mov    %edi,%edx
  lea    -0x140(%rbp),%rdi
  mov    %esi,%r9d
  mov    %ecx,%r8d
  mov    %eax,%ecx
  lea    D80(%rip),%rax
  mov    %rax,%rsi
  mov    $0x0,%eax
  call   <sprintf@plt>
  lea    -0x140(%rbp),%rax
  mov    %rax,%rsi
  lea    D149(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x140(%rbp),%rdx
  lea    -0xe0(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  lea    -0xe0(%rbp),%rax
  lea    D143(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L61
L118:
  movsd  -0x148(%rbp),%xmm1
  movsd  D76(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  lea    D94(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movsd  -0x148(%rbp),%xmm1
  movsd  D76(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rbx
  lea    -0xe0(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cltq
  lea    -0xe0(%rbp),%rdx
  add    %rdx,%rax
  movq   %rbx,%xmm0
  lea    D15(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <sprintf@plt>
  jmp    L61
L94:
  mov    -0x148(%rbp),%rax
  movq   %rax,%xmm0
  lea    D121(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  lea    -0xe0(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cltq
  lea    -0xe0(%rbp),%rdx
  add    %rax,%rdx
  mov    -0x148(%rbp),%rax
  movq   %rax,%xmm0
  lea    D97(%rip),%rax
  mov    %rax,%rsi
  mov    %rdx,%rdi
  mov    $0x1,%eax
  call   <sprintf@plt>
  nop
L61:
  addl   $0x1,-0x15c(%rbp)
L80:
  cmpl   $0x9,-0x15c(%rbp)
  jle    L119
  mov    -0x150(%rbp),%rax
  mov    %rax,%rdi
  call   <fclose@plt>
  lea    -0xe0(%rbp),%rax
  mov    %rax,%rsi
  lea    D71(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  mov    -0x18(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L129
  call   <__stack_chk_fail@plt>
L129:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: label: D99
data_type: string
name: disassemble_data
arguments: label: D113
data_type: string
name: disassemble_data
arguments: label: D135
data_type: string
name: disassemble_data
arguments: label: D32
data_type: string
name: disassemble_data
arguments: label: D76
data_type: f64
name: disassemble_data
arguments: label: D80
data_type: string
name: disassemble_data
arguments: label: D149
data_type: string
name: disassemble_data
arguments: label: D143
data_type: string
name: disassemble_data
arguments: label: D94
data_type: string
name: disassemble_data
arguments: label: D15
data_type: string
name: disassemble_data
arguments: label: D121
data_type: string
name: disassemble_data
arguments: label: D97
data_type: string
name: disassemble_data
arguments: label: D71
data_type: string

tool: D99: rb

tool: D113: %04d-%02d-%02d

tool: D135: Date : %s


tool: D32: find_orb -oSpektrRG -v%sT

tool: D76: 1000

tool: D80: %02d:%02d:%02d.%03d

tool: D149: Time : %s


tool: D143: -3h

tool: D94:   Posn %f km


tool: D15: ,%.2f

tool: D121:   Vel  %f km/s


tool: D97: ,%.7f

tool: D71: %s,eq,geo,km,s


assistant: ```c
int main(const int argc, const char **argv) {
  FILE *ifile = fopen(argv[1], "rb");
  char buff[90];
  char command[200];
  int i;
  assert(ifile);
  for (i = 0; i < 10; i++)
    if (fgets(buff, sizeof(buff), ifile)) {
      const double ival = atof(buff);
      switch (i) {
      case 2: {
        const int day = (int)ival;
        sprintf(buff, "%04d-%02d-%02d", day / 10000, (day / 100) % 100, day % 100);
        printf("Date : %s\n", buff);
        sprintf(command, "find_orb -oSpektrRG -v%sT", buff);
      } break;
      case 3: {
        const int millisec = (int)(ival * 1000.);
        sprintf(buff, "%02d:%02d:%02d.%03d", millisec / 10000000, (millisec / 100000) % 100, (millisec / 1000) % 100, millisec % 100);
        printf("Time : %s\n", buff);
        strcat(command, buff);
        strcat(command, "-3h");
      } break;
      case 4:
      case 5:
      case 6:
        printf("  Posn %f km\n", ival * 1000.);
        sprintf(command + strlen(command), ",%.2f", ival * 1000.);
        break;
      case 7:
      case 8:
      case 9:
        printf("  Vel  %f km/s\n", ival);
        sprintf(command + strlen(command), ",%.7f", ival);
        break;
        break;
      }
    }
  fclose(ifile);
  printf("%s,eq,geo,km,s\n", command);
  return (0);
}
```