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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x48,%rsp
  mov    %edi,-0x44(%rbp)
  mov    %rsi,-0x50(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  movsd  D144(%rip),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movsd  D115(%rip),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  mov    $0x0,%eax
  call   <initialiseLookupTable@plt>
  cmpl   $0x4,-0x44(%rbp)
  jne    L23
  mov    -0x50(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  lea    -0x40(%rbp),%rdx
  lea    D56(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  mov    %eax,%ebx
  mov    -0x50(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  lea    -0x38(%rbp),%rdx
  lea    D66(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    %eax,%ebx
  mov    -0x50(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%rax
  lea    -0x30(%rbp),%rdx
  lea    D66(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    %ebx,%eax
  mov    %eax,-0x3c(%rbp)
  cmpl   $0x3,-0x3c(%rbp)
  je     L27
  lea    D146(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0x1,%eax
  jmp    L22
L27:
  mov    -0x40(%rbp),%edx
  movsd  -0x30(%rbp),%xmm0
  mov    -0x38(%rbp),%rax
  mov    %edx,%esi
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  lea    D274(%rip),%rax
  mov    %rax,%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  movsd  -0x30(%rbp),%xmm0
  mov    -0x38(%rbp),%rdx
  mov    -0x40(%rbp),%eax
  movapd %xmm0,%xmm1
  movq   %rdx,%xmm0
  mov    %eax,%edi
  mov    $0x2,%eax
  call   <sunriseTime@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x30(%rbp),%xmm0
  mov    -0x38(%rbp),%rdx
  mov    -0x40(%rbp),%eax
  movapd %xmm0,%xmm1
  movq   %rdx,%xmm0
  mov    %eax,%edi
  mov    $0x2,%eax
  call   <sunsetTime@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x20(%rbp),%xmm1
  movsd  D260(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x20(%rbp),%xmm2
  movsd  D260(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  cvttsd2si %xmm1,%eax
  pxor   %xmm2,%xmm2
  cvtsi2sd %eax,%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D172(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D170(%rip),%xmm0
  addsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%esi
  movsd  -0x20(%rbp),%xmm1
  movsd  D260(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%ecx
  movsd  -0x28(%rbp),%xmm1
  movsd  D260(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x28(%rbp),%xmm2
  movsd  D260(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  cvttsd2si %xmm1,%eax
  pxor   %xmm2,%xmm2
  cvtsi2sd %eax,%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D172(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D170(%rip),%xmm0
  addsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%edx
  movsd  -0x28(%rbp),%xmm1
  movsd  D260(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  mov    %esi,%r8d
  mov    %eax,%esi
  lea    D280(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movsd  -0x30(%rbp),%xmm0
  mov    -0x38(%rbp),%rdx
  mov    -0x40(%rbp),%eax
  movapd %xmm0,%xmm1
  movq   %rdx,%xmm0
  mov    %eax,%edi
  mov    $0x2,%eax
  call   <lookupSunriseTime@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x30(%rbp),%xmm0
  mov    -0x38(%rbp),%rdx
  mov    -0x40(%rbp),%eax
  movapd %xmm0,%xmm1
  movq   %rdx,%xmm0
  mov    %eax,%edi
  mov    $0x2,%eax
  call   <lookupSunsetTime@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x20(%rbp),%xmm1
  movsd  D260(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x20(%rbp),%xmm2
  movsd  D260(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  cvttsd2si %xmm1,%eax
  pxor   %xmm2,%xmm2
  cvtsi2sd %eax,%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D172(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D170(%rip),%xmm0
  addsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%esi
  movsd  -0x20(%rbp),%xmm1
  movsd  D260(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%ecx
  movsd  -0x28(%rbp),%xmm1
  movsd  D260(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x28(%rbp),%xmm2
  movsd  D260(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  cvttsd2si %xmm1,%eax
  pxor   %xmm2,%xmm2
  cvtsi2sd %eax,%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D172(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D170(%rip),%xmm0
  addsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%edx
  movsd  -0x28(%rbp),%xmm1
  movsd  D260(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  mov    %esi,%r8d
  mov    %eax,%esi
  lea    D88(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L22
L23:
  movsd  -0x30(%rbp),%xmm0
  mov    -0x38(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  lea    D0(%rip),%rax
  mov    %rax,%rdi
  mov    $0x2,%eax
  call   <writeLookupTableForOctave@plt>
  mov    %eax,%ebx
  movsd  -0x30(%rbp),%xmm0
  mov    -0x38(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  lea    D24(%rip),%rax
  mov    %rax,%rdi
  mov    $0x2,%eax
  call   <writeLookupTableForAssembler@plt>
  add    %ebx,%eax
L22:
  mov    -0x18(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L8
  call   <__stack_chk_fail@plt>
L8:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: read_data
arguments: data_tag: D144
type_guessed: f64
name: read_data
arguments: data_tag: D115
type_guessed: byte[8]
name: read_data
arguments: data_tag: D56
type_guessed: string
name: read_data
arguments: data_tag: D66
type_guessed: string
name: read_data
arguments: data_tag: D146
type_guessed: string
name: read_data
arguments: data_tag: D274
type_guessed: string
name: read_data
arguments: data_tag: D260
type_guessed: byte[8]
name: read_data
arguments: data_tag: D172
type_guessed: byte[8]
name: read_data
arguments: data_tag: D170
type_guessed: f64
name: read_data
arguments: data_tag: D280
type_guessed: string
name: read_data
arguments: data_tag: D88
type_guessed: string
name: read_data
arguments: data_tag: D0
type_guessed: string
name: read_data
arguments: data_tag: D24
type_guessed: string

tool: D144: 51.509865

tool: {"D115": [0xca,0x52,0xeb,0xfd,0x46,0x3b,0xbe,0xbf]}

tool: D56: %d

tool: D66: %lg

tool: D146: Unable to parse arguments.  Expected day, latitude and longitude.

tool: D274: For %g,%g on day %d:


tool: {"D260": [0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x40]}

tool: {"D172": [0x00,0x00,0x00,0x00,0x00,0x00,0x4e,0x40]}

tool: D170: 0.5

tool: D280: Actual: sunrise=%.2d:%.2d, sunset=%.2d:%.2d


tool: D88: Lookup: sunrise=%.2d:%.2d, sunset=%.2d:%.2d


tool: D0: lookup.txt

tool: D24: lookup.asm

assistant: ```c
int main(int argc, char *argv[]) {
  double latitude = 51.509865;
  double longitude = -0.118092;
  initialiseLookupTable();
  if (argc == 4) {
    double sunrise, sunset;
    int day;
    int success = sscanf(argv[1], "%d", &day) + sscanf(argv[2], "%lg", &latitude) + sscanf(argv[3], "%lg", &longitude);
    if (success != 3) {
      printf("Unable to parse arguments.  "
             "Expected day, latitude and longitude.\n");
      return 1;
    }
    printf("For %g,%g on day %d:\n", latitude, longitude, day);
    sunrise = sunriseTime(day, latitude, longitude);
    sunset = sunsetTime(day, latitude, longitude);
    printf("Actual: sunrise=%.2d:%.2d, sunset=%.2d:%.2d\n", ((int)((sunrise)*24)), ((int)(((sunrise)*24 - ((int)((sunrise)*24))) * 60 + 0.5)), ((int)((sunset)*24)), ((int)(((sunset)*24 - ((int)((sunset)*24))) * 60 + 0.5)));
    sunrise = lookupSunriseTime(day, latitude, longitude);
    sunset = lookupSunsetTime(day, latitude, longitude);
    printf("Lookup: sunrise=%.2d:%.2d, sunset=%.2d:%.2d\n", ((int)((sunrise)*24)), ((int)(((sunrise)*24 - ((int)((sunrise)*24))) * 60 + 0.5)), ((int)((sunset)*24)), ((int)(((sunset)*24 - ((int)((sunset)*24))) * 60 + 0.5)));
    return 0;
  }
  return writeLookupTableForOctave("lookup.txt", latitude, longitude) + writeLookupTableForAssembler("lookup.asm", latitude, longitude);
}
```