user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<main>:
  endbr64
  push   %rbp
  lea    D36(%rip),%rdi
  lea    D1(%rip),%rbp
  sub    $0x20,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  call   <puts@plt>
  lea    0x14(%rsp),%rsi
  mov    %rbp,%rdi
  call   <scanf@plt>
  lea    D207(%rip),%rdi
  call   <puts@plt>
  lea    0x10(%rsp),%rsi
  mov    %rbp,%rdi
  call   <scanf@plt>
  movss  0x14(%rsp),%xmm2
  movss  0x10(%rsp),%xmm0
  mov    $0x2,%edi
  movss  %xmm2,(%rsp)
  call   <pow@plt>
  pxor   %xmm0,%xmm0
  pxor   %xmm1,%xmm1
  movss  (%rsp),%xmm2
  cvtsi2ss %eax,%xmm0
  lea    D83(%rip),%rdi
  mov    $0x1,%eax
  divss  %xmm0,%xmm2
  cvtss2sd %xmm2,%xmm1
  movapd %xmm1,%xmm0
  movss  %xmm2,0xc(%rsp)
  movsd  %xmm1,(%rsp)
  call   <printf@plt>
  movsd  (%rsp),%xmm1
  movsd  D208(%rip),%xmm5
  movss  0xc(%rsp),%xmm2
  comisd %xmm1,%xmm5
  jae    L47
L84:
  movsd  D25(%rip),%xmm0
  comisd %xmm1,%xmm0
  jb     L22
  comisd D208(%rip),%xmm1
  ja     L66
L22:
  movsd  D33(%rip),%xmm3
  comisd %xmm1,%xmm3
  jb     L29
  comisd %xmm0,%xmm1
  ja     L104
L29:
  movss  D171(%rip),%xmm0
  comiss %xmm2,%xmm0
  jb     L85
  comisd %xmm3,%xmm1
  ja     L50
L85:
  comiss D171(%rip),%xmm2
  ja     L124
L100:
  xor    %eax,%eax
  call   <getch@plt>
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L17
  add    $0x20,%rsp
  xor    %eax,%eax
  pop    %rbp
  ret
L47:
  lea    D168(%rip),%rdi
  call   <puts@plt>
  movss  0x10(%rsp),%xmm0
  mov    $0x2,%edi
  call   <pow@plt>
  pxor   %xmm0,%xmm0
  lea    D39(%rip),%rdi
  imul   $0x1a,%eax,%eax
  cvtsi2ss %eax,%xmm0
  subss  0x14(%rsp),%xmm0
  mov    $0x1,%eax
  cvtss2sd %xmm0,%xmm0
  call   <printf@plt>
  movss  0xc(%rsp),%xmm2
  movsd  (%rsp),%xmm1
  jmp    L84
L124:
  lea    D113(%rip),%rdi
  call   <puts@plt>
  movss  0x10(%rsp),%xmm0
  mov    $0x2,%edi
  call   <pow@plt>
  pxor   %xmm1,%xmm1
  movss  0x14(%rsp),%xmm0
  lea    D181(%rip),%rdi
  imul   $0x1a,%eax,%eax
  cvtsi2ss %eax,%xmm1
  mov    $0x1,%eax
  subss  %xmm1,%xmm0
  cvtss2sd %xmm0,%xmm0
  call   <printf@plt>
  jmp    L100
L50:
  lea    D18(%rip),%rdi
  movss  %xmm2,(%rsp)
  call   <puts@plt>
  movss  0x10(%rsp),%xmm0
  mov    $0x2,%edi
  call   <pow@plt>
  pxor   %xmm1,%xmm1
  movss  0x14(%rsp),%xmm0
  lea    D181(%rip),%rdi
  imul   $0x1a,%eax,%eax
  cvtsi2ss %eax,%xmm1
  mov    $0x1,%eax
  subss  %xmm1,%xmm0
  cvtss2sd %xmm0,%xmm0
  call   <printf@plt>
  movss  (%rsp),%xmm2
  jmp    L85
L66:
  lea    D92(%rip),%rdi
  movss  %xmm2,0xc(%rsp)
  movsd  %xmm1,(%rsp)
  call   <puts@plt>
  movss  0xc(%rsp),%xmm2
  movsd  (%rsp),%xmm1
  mov    D25(%rip),%rax
  movq   %rax,%xmm0
  jmp    L22
L104:
  lea    D152(%rip),%rdi
  movss  %xmm2,0xc(%rsp)
  movsd  %xmm1,(%rsp)
  call   <puts@plt>
  movss  0x10(%rsp),%xmm0
  mov    $0x2,%edi
  call   <pow@plt>
  pxor   %xmm4,%xmm4
  movss  0x14(%rsp),%xmm0
  lea    D181(%rip),%rdi
  imul   $0x1a,%eax,%eax
  cvtsi2ss %eax,%xmm4
  mov    $0x1,%eax
  subss  %xmm4,%xmm0
  cvtss2sd %xmm0,%xmm0
  call   <printf@plt>
  mov    D33(%rip),%rax
  movss  0xc(%rsp),%xmm2
  movsd  (%rsp),%xmm1
  movq   %rax,%xmm3
  jmp    L29
L17:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D36
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D1
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D207
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D83
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D208
type_guessed: f64[2]
name: extract_symbolic_data
arguments: data_tag: D25
type_guessed: f64
name: extract_symbolic_data
arguments: data_tag: D33
type_guessed: f64
name: extract_symbolic_data
arguments: data_tag: D171
type_guessed: byte[4]
name: extract_symbolic_data
arguments: data_tag: D168
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D39
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D113
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D181
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D18
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D92
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D152
type_guessed: string

tool: D36: Calculadora de IMC avancada
Digite sua massa (em Kg):

tool: D1: %f

tool: D207: Digite sua altura em Metros (utilize . [ponto] como separador):

tool: D83: Seu IMC e %f 


tool: {"D208": [20.2,26.2]}

tool: D25: 26.2

tool: D33: 27.6

tool: {"D171": [0x00,0x00,0xf8,0x41]}

tool: D168: Voce esta abaixo do Peso.

tool: D39: Voce pode engordar %.2f Kg

tool: D113: Voce esta obeso.

tool: D181: Voce precisa perder %.2f Kg

tool: D18: Voce esta acima do peso ideal.

tool: D92: Voce esta no peso normal.

tool: D152: Voce esta um pouco acima do peso.

assistant: ```c
int main() {
  float altura, massa, imc, perda, massaideal;
  printf("Calculadora de IMC avancada\nDigite sua massa (em Kg):\n");
  scanf("%f", &massa);
  printf("Digite sua altura em Metros (utilize . [ponto] como separador):\n");
  scanf("%f", &altura);
  imc = massa / pow(altura, 2);
  printf("Seu IMC e %f \n", imc);
  if (imc <= 20.2) {
    printf("Voce esta abaixo do Peso.\n");
    massaideal = 26 * (pow(altura, 2));
    perda = massaideal - massa;
    printf("Voce pode engordar %.2f Kg", perda);
  }
  if ((imc <= 26.2) && (imc > 20.2)) {
    printf("Voce esta no peso normal.\n");
  }
  if ((imc <= 27.6) && (imc > 26.2)) {
    printf("Voce esta um pouco acima do peso.\n");
    massaideal = 26 * (pow(altura, 2));
    perda = massa - massaideal;
    printf("Voce precisa perder %.2f Kg", perda);
  }
  if ((imc <= 31) && (imc > 27.6)) {
    printf("Voce esta acima do peso ideal.\n");
    massaideal = 26 * pow(altura, 2);
    perda = massa - massaideal;
    printf("Voce precisa perder %.2f Kg", perda);
  }
  if (imc > 31) {
    printf("Voce esta obeso.\n");
    massaideal = 26 * pow(altura, 2);
    perda = massa - massaideal;
    printf("Voce precisa perder %.2f Kg", perda);
  }
  getch();
  return 0;
}
```