user: 下面的汇编指令对应的C源代码是什么：

```asm
<imc_getWCS>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0xb8,%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    0x10(%rbp),%rax
  mov    %rax,-0x68(%rbp)
  mov    0x18(%rbp),%rax
  mov    %rax,-0x70(%rbp)
  mov    0x20(%rbp),%rax
  mov    %rax,-0x78(%rbp)
  mov    0x28(%rbp),%rax
  mov    %rax,-0x80(%rbp)
  mov    0x30(%rbp),%rax
  mov    %rax,-0x88(%rbp)
  mov    0x38(%rbp),%rax
  mov    %rax,-0x90(%rbp)
  mov    0x40(%rbp),%rax
  mov    %rax,-0x98(%rbp)
  mov    0x48(%rbp),%rax
  mov    %rax,-0xa0(%rbp)
  mov    0x50(%rbp),%rax
  mov    %rax,-0xa8(%rbp)
  mov    0x58(%rbp),%rax
  mov    %rax,-0xb0(%rbp)
  mov    0x60(%rbp),%rax
  mov    %rax,-0xb8(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x28(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x24(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x20(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x1c(%rbp)
  mov    -0x40(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  lea    D120(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <imget_fits_value@plt>
  cmp    $0x1,%eax
  jne    L70
  mov    -0x48(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  lea    D132(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <imget_fits_value@plt>
  cmp    $0x1,%eax
  jne    L70
  mov    -0x50(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  lea    D26(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <imget_fits_value@plt>
  cmp    $0x1,%eax
  jne    L70
  mov    -0x70(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  lea    D116(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <imget_fits_value@plt>
  cmp    $0x1,%eax
  jne    L70
  mov    -0x78(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  lea    D18(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <imget_fits_value@plt>
  cmp    $0x1,%eax
  jne    L70
  mov    -0x90(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  lea    D109(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <imget_fits_value@plt>
  cmp    $0x1,%eax
  jne    L70
  mov    -0x98(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  lea    D164(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <imget_fits_value@plt>
  cmp    $0x1,%eax
  jne    L70
  mov    -0x80(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  lea    D170(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <imget_fits_value@plt>
  mov    -0x88(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  lea    D60(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <imget_fits_value@plt>
  mov    -0x68(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  lea    D27(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <imget_fits_value@plt>
  cmp    $0x1,%eax
  jne    L84
  mov    -0x68(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  lea    D148(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <imget_fits_value@plt>
  cmp    $0x1,%eax
  je     L132
L84:
  mov    -0x68(%rbp),%rax
  lea    D114(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
L132:
  mov    -0xa0(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  lea    D140(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <imget_fits_value@plt>
  mov    %eax,%ebx
  mov    -0xa8(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  lea    D28(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <imget_fits_value@plt>
  add    %eax,%ebx
  mov    -0xb0(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  lea    D143(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <imget_fits_value@plt>
  add    %eax,%ebx
  mov    -0xb8(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  lea    D97(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <imget_fits_value@plt>
  add    %ebx,%eax
  test   %eax,%eax
  je     L94
  mov    $0x1,%eax
  jmp    L7
L94:
  mov    -0x58(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  lea    D127(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <imget_fits_value@plt>
  cmp    $0x1,%eax
  jne    L197
  mov    -0x60(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  lea    D257(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <imget_fits_value@plt>
  cmp    $0x1,%eax
  jne    L197
  lea    -0x28(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  lea    D205(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <imget_fits_float_value@plt>
  cmp    $0x1,%eax
  jne    L197
  lea    -0x24(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  lea    D39(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <imget_fits_float_value@plt>
  cmp    $0x1,%eax
  jne    L197
  lea    -0x20(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  lea    D151(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <imget_fits_float_value@plt>
  cmp    $0x1,%eax
  jne    L197
  lea    -0x1c(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  lea    D197(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <imget_fits_float_value@plt>
  cmp    $0x1,%eax
  jne    L197
  mov    -0x58(%rbp),%rax
  mov    %rax,%rdi
  call   <atof@plt>
  movss  -0x28(%rbp),%xmm1
  mulss  %xmm1,%xmm0
  movd   %xmm0,%edx
  mov    -0xa0(%rbp),%rax
  movd   %edx,%xmm0
  lea    D75(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    -0x58(%rbp),%rax
  mov    %rax,%rdi
  call   <atof@plt>
  movss  -0x24(%rbp),%xmm1
  mulss  %xmm1,%xmm0
  movd   %xmm0,%edx
  mov    -0xa8(%rbp),%rax
  movd   %edx,%xmm0
  lea    D75(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    -0x60(%rbp),%rax
  mov    %rax,%rdi
  call   <atof@plt>
  movss  -0x20(%rbp),%xmm1
  mulss  %xmm1,%xmm0
  movd   %xmm0,%edx
  mov    -0xb0(%rbp),%rax
  movd   %edx,%xmm0
  lea    D75(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    -0x60(%rbp),%rax
  mov    %rax,%rdi
  call   <atof@plt>
  movss  -0x1c(%rbp),%xmm1
  mulss  %xmm1,%xmm0
  movd   %xmm0,%edx
  mov    -0xb8(%rbp),%rax
  movd   %edx,%xmm0
  lea    D75(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    $0x1,%eax
  jmp    L7
L197:
  mov    $0x0,%eax
  jmp    L7
L70:
  mov    $0x0,%eax
L7:
  mov    -0x18(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L39
  call   <__stack_chk_fail@plt>
L39:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: label: D120
datatype: string
name: retrieve_data
arguments: label: D132
datatype: string
name: retrieve_data
arguments: label: D26
datatype: string
name: retrieve_data
arguments: label: D116
datatype: string
name: retrieve_data
arguments: label: D18
datatype: string
name: retrieve_data
arguments: label: D109
datatype: string
name: retrieve_data
arguments: label: D164
datatype: string
name: retrieve_data
arguments: label: D170
datatype: string
name: retrieve_data
arguments: label: D60
datatype: string
name: retrieve_data
arguments: label: D27
datatype: string
name: retrieve_data
arguments: label: D148
datatype: string
name: retrieve_data
arguments: label: D114
datatype: string
name: retrieve_data
arguments: label: D140
datatype: string
name: retrieve_data
arguments: label: D28
datatype: string
name: retrieve_data
arguments: label: D143
datatype: string
name: retrieve_data
arguments: label: D97
datatype: string
name: retrieve_data
arguments: label: D127
datatype: string
name: retrieve_data
arguments: label: D257
datatype: string
name: retrieve_data
arguments: label: D205
datatype: string
name: retrieve_data
arguments: label: D39
datatype: string
name: retrieve_data
arguments: label: D151
datatype: string
name: retrieve_data
arguments: label: D197
datatype: string
name: retrieve_data
arguments: label: D75
datatype: string

tool: D120: CRVAL1

tool: D132: CRVAL2

tool: D26: EQUINOX

tool: D116: CTYPE1

tool: D18: CTYPE2

tool: D109: CRPIX1

tool: D164: CRPIX2

tool: D170: CUNIT1

tool: D60: CUNIT2

tool: D27: LONPOLE

tool: D148: LONGPOLE

tool: D114: 180.0

tool: D140: CD1_1

tool: D28: CD1_2

tool: D143: CD2_1

tool: D97: CD2_2

tool: D127: CDELT1

tool: D257: CDELT2

tool: D205: PC001001

tool: D39: PC001002

tool: D151: PC002001

tool: D197: PC002002

tool: D75: %f

assistant: ```c
int imc_getWCS(struct icom *icom, char *crval1, char *crval2, char *equinox, char *cdelt1, char *cdelt2, char *longpole, char *ctype1, char *ctype2, char *cunit1, char *cunit2, char *crpix1, char *crpix2, char *cd11, char *cd12, char *cd21, char *cd22) {
  float pc11 = 0, pc12 = 0, pc21 = 0, pc22 = 0;
  if (imget_fits_value(icom, "CRVAL1", crval1) == 1 && imget_fits_value(icom, "CRVAL2", crval2) == 1 && imget_fits_value(icom, "EQUINOX", equinox) == 1 && imget_fits_value(icom, "CTYPE1", ctype1) == 1 && imget_fits_value(icom, "CTYPE2", ctype2) == 1 && imget_fits_value(icom, "CRPIX1", crpix1) == 1 && imget_fits_value(icom, "CRPIX2", crpix2) == 1) {
    imget_fits_value(icom, "CUNIT1", cunit1);
    imget_fits_value(icom, "CUNIT2", cunit2);
    if (imget_fits_value(icom, "LONPOLE", longpole) != 1 || imget_fits_value(icom, "LONGPOLE", longpole) != 1)
      strcpy(longpole, "180.0");
    if ((imget_fits_value(icom, "CD1_1", cd11) + imget_fits_value(icom, "CD1_2", cd12) + imget_fits_value(icom, "CD2_1", cd21) + imget_fits_value(icom, "CD2_2", cd22)) != 0) {
      return 1;
    } else if (imget_fits_value(icom, "CDELT1", cdelt1) == 1 && imget_fits_value(icom, "CDELT2", cdelt2) == 1 && imget_fits_float_value(icom, "PC001001", &pc11) == 1 && imget_fits_float_value(icom, "PC001002", &pc12) == 1 && imget_fits_float_value(icom, "PC002001", &pc21) == 1 && imget_fits_float_value(icom, "PC002002", &pc22) == 1) {
      sprintf(cd11, "%f", pc11 * atof(cdelt1));
      sprintf(cd12, "%f", pc12 * atof(cdelt1));
      sprintf(cd21, "%f", pc21 * atof(cdelt2));
      sprintf(cd22, "%f", pc22 * atof(cdelt2));
      return 1;
    } else
      return 0;
  } else
    return 0;
}
```