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

```asm
<main>:
  endbr64
  push   %r14
  lea    D24(%rip),%rdi
  push   %rbx
  sub    $0x58,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x48(%rsp)
  xor    %eax,%eax
  lea    0x2f(%rsp),%rdx
  lea    0x2e(%rsp),%rsi
  call   <scanf@plt>
  xor    %eax,%eax
  lea    0x40(%rsp),%rcx
  lea    0x30(%rsp),%rdx
  lea    0x38(%rsp),%rsi
  lea    D138(%rip),%rdi
  call   <scanf@plt>
  cmpb   $0x43,0x2e(%rsp)
  jne    L53
  cmpb   $0x46,0x2f(%rsp)
  je     L50
L53:
  lea    D23(%rip),%rdi
  call   <puts@plt>
  movsd  D6(%rip),%xmm5
  movsd  0x30(%rsp),%xmm1
  movsd  0x38(%rsp),%xmm0
  addsd  %xmm5,%xmm1
  movq   %xmm5,%r14
  comisd %xmm0,%xmm1
  jb     L39
  movsd  D100(%rip),%xmm6
  movsd  D58(%rip),%xmm7
  lea    D113(%rip),%rbx
  movsd  %xmm6,0x8(%rsp)
  movsd  D95(%rip),%xmm6
  movsd  %xmm7,0x10(%rsp)
  movsd  %xmm6,0x18(%rsp)
L25:
  movapd %xmm0,%xmm1
  mov    %rbx,%rdi
  subsd  0x18(%rsp),%xmm1
  mov    $0x2,%eax
  mulsd  0x10(%rsp),%xmm1
  divsd  0x8(%rsp),%xmm1
  call   <printf@plt>
  movq   %r14,%xmm1
  movsd  0x38(%rsp),%xmm0
  addsd  0x30(%rsp),%xmm1
  addsd  0x40(%rsp),%xmm0
  comisd %xmm0,%xmm1
  movsd  %xmm0,0x38(%rsp)
  jae    L25
L39:
  mov    0x48(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L17
  add    $0x58,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %r14
  ret
L50:
  lea    D90(%rip),%rdi
  call   <puts@plt>
  movsd  D6(%rip),%xmm7
  movsd  0x30(%rsp),%xmm1
  movsd  0x38(%rsp),%xmm0
  addsd  %xmm7,%xmm1
  movq   %xmm7,%r14
  comisd %xmm0,%xmm1
  jb     L39
  movsd  D100(%rip),%xmm7
  lea    D113(%rip),%rbx
  movsd  %xmm7,0x8(%rsp)
  movsd  D58(%rip),%xmm7
  movsd  %xmm7,0x10(%rsp)
  movsd  D95(%rip),%xmm7
  movsd  %xmm7,0x18(%rsp)
  nopl   0x0(%rax)
L8:
  movsd  0x8(%rsp),%xmm1
  mov    %rbx,%rdi
  mov    $0x2,%eax
  mulsd  %xmm0,%xmm1
  divsd  0x10(%rsp),%xmm1
  addsd  0x18(%rsp),%xmm1
  call   <printf@plt>
  movsd  0x38(%rsp),%xmm0
  movq   %r14,%xmm1
  addsd  0x40(%rsp),%xmm0
  addsd  0x30(%rsp),%xmm1
  movsd  %xmm0,0x38(%rsp)
  comisd %xmm0,%xmm1
  jae    L8
  jmp    L39
L17:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D24
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D138
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D23
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D6
type_guessed: f64
name: extract_symbolic_data
arguments: data_tag: D100
type_guessed: byte[8]
name: extract_symbolic_data
arguments: data_tag: D58
type_guessed: byte[8]
name: extract_symbolic_data
arguments: data_tag: D113
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D95
type_guessed: byte[8]
name: extract_symbolic_data
arguments: data_tag: D90
type_guessed: string

tool: D24: %c->%c

tool: D138: %lf%lf%lf

tool: D23:    F  ->    C

tool: D6: 0.01

tool: {"D100": [0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x40]}

tool: {"D58": [0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x40]}

tool: D113: %5.1lf ->%6.1lf


tool: {"D95": [0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40]}

tool: D90:    C  ->    F

assistant: ```c
int main() {
  double h, l, a, b, d;
  char c, f;
  scanf("%c->%c", &c, &f);
  scanf("%lf%lf%lf", &l, &h, &a);
  if (c == 'C' && f == 'F') {
    printf("   C  ->    F\n");
    for (; l <= h + 0.01; l = l + a) {
      b = 9 * l / 5 + 32;
      printf("%5.1lf ->%6.1lf\n", l, b);
    }
  } else {
    printf("   F  ->    C\n");
    for (; l <= h + 0.01; l = l + a) {
      b = (l - 32) * 5 / 9;
      printf("%5.1lf ->%6.1lf\n", l, b);
    }
  }
  return 0;
}
```