user: Translate the below assembly code into C programming language:

```asm
<ex10>:
  endbr64
  push   %r13
  lea    D23(%rip),%r13
  push   %r12
  mov    %r13,%rdi
  push   %rbp
  push   %rbx
  lea    D101(%rip),%rbx
  sub    $0x28,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  lea    0x4(%rsp),%r12
  call   <print@plt>
  lea    D107(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbx,%rdi
  call   <scanf@plt>
  movss  0x4(%rsp),%xmm0
  pxor   %xmm4,%xmm4
  comiss %xmm4,%xmm0
  ja     L36
  lea    D35(%rip),%rbp
  nopl   0x0(%rax,%rax,1)
L28:
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbx,%rdi
  call   <scanf@plt>
  movss  0x4(%rsp),%xmm0
  pxor   %xmm2,%xmm2
  comiss %xmm2,%xmm0
  jbe    L28
L36:
  lea    D16(%rip),%rdi
  xor    %eax,%eax
  lea    0x8(%rsp),%r12
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbx,%rdi
  call   <scanf@plt>
  movss  0x8(%rsp),%xmm0
  pxor   %xmm5,%xmm5
  comiss %xmm5,%xmm0
  ja     L30
  lea    D35(%rip),%rbp
  nopl   0x0(%rax,%rax,1)
L55:
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbx,%rdi
  call   <scanf@plt>
  movss  0x8(%rsp),%xmm0
  pxor   %xmm3,%xmm3
  comiss %xmm3,%xmm0
  jbe    L55
L30:
  movabs $0x4847464544434241,%rax
  movss  0x4(%rsp),%xmm1
  comiss D28(%rip),%xmm1
  mov    %rax,0xe(%rsp)
  mov    $0x49,%eax
  mov    %ax,0x16(%rsp)
  mov    $0x6,%eax
  ja     L1
  xor    %eax,%eax
  comiss D17(%rip),%xmm1
  seta   %al
  lea    (%rax,%rax,2),%eax
L1:
  cvtss2sd %xmm0,%xmm0
  comisd D21(%rip),%xmm0
  jbe    L58
  add    $0x2,%eax
L41:
  cltq
  lea    D3(%rip),%rdi
  movsbl 0xe(%rsp,%rax,1),%esi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r13,%rdi
  call   <print@plt>
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L74
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  nopl   0x0(%rax)
L58:
  comisd D83(%rip),%xmm0
  sbb    $0xffffffff,%eax
  jmp    L41
L74:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: read_data
arguments: label: D23
type_guessed: string
name: read_data
arguments: label: D101
type_guessed: string
name: read_data
arguments: label: D107
type_guessed: string
name: read_data
arguments: label: D35
type_guessed: string
name: read_data
arguments: label: D16
type_guessed: string
name: read_data
arguments: label: D28
type_guessed: byte[4]
name: read_data
arguments: label: D17
type_guessed: byte[4]
name: read_data
arguments: label: D21
type_guessed: f64[2]
name: read_data
arguments: label: D3
type_guessed: string
name: read_data
arguments: label: D83
type_guessed: f64

tool: D23: 
------------------------------


tool: D101: %f

tool: D107: Informe o peso: 

tool: D35: Valor invalido, tente novamente: 

tool: D16: Informe a altura: 

tool: {"D28": [0x00,0x00,0xb4,0x42]}

tool: {"D17": [0x00,0x00,0x70,0x42]}

tool: {"D21": [1.7,1.2]}

tool: D3: Sua classificacao e: %c


tool: D83: 1.2

assistant: ```c
void ex10() {
  print("\n------------------------------\n");
  float peso, altura;
  printf("Informe o peso: ");
  scanf("%f", &peso);
  while (!(peso > 0)) {
    printf("Valor invalido, tente novamente: ");
    scanf("%f", &peso);
  }
  printf("Informe a altura: ");
  scanf("%f", &altura);
  while (!(altura > 0)) {
    printf("Valor invalido, tente novamente: ");
    scanf("%f", &altura);
  }
  int grupo = 0;
  char grupos[10] = "ABCDEFGHI";
  if (peso > 90)
    grupo += 6;
  else if (peso > 60)
    grupo += 3;
  if (altura > 1.7)
    grupo += 2;
  else if (altura >= 1.2)
    grupo++;
  printf("Sua classificacao e: %c\n", grupos[grupo]);
  print("\n------------------------------\n");
}
```