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

```asm
<main>:
  endbr64
  push   %r15
  push   %r14
  lea    D24(%rip),%r14
  push   %r13
  lea    D67(%rip),%r13
  push   %r12
  push   %rbp
  push   %rbx
  xor    %ebx,%ebx
  sub    $0x78,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x68(%rsp)
  xor    %eax,%eax
  lea    0x14(%rsp),%r12
  mov    %r12,%rbp
  jmp    L131
  nopl   0x0(%rax)
L173:
  add    $0x1,%ebx
  add    $0x4,%rbp
  cmp    $0x14,%ebx
  je     L165
L131:
  mov    %r14,%rdi
  xor    %eax,%eax
  mov    %ebx,%r15d
  call   <printf@plt>
  mov    %rbp,%rsi
  mov    %r13,%rdi
  call   <scanf@plt>
  mov    0x0(%rbp),%eax
  test   %eax,%eax
  jne    L173
  test   %ebx,%ebx
  je     L72
  cmp    $0x3,%ebx
  jle    L187
L235:
  movslq %r15d,%rax
  pxor   %xmm1,%xmm1
  mov    %ebx,%edx
  lea    0x4(%rsp,%rax,4),%rax
  shr    $0x2,%edx
  movdqu (%rax),%xmm3
  pshufd $0x1b,%xmm3,%xmm0
  cvtdq2ps %xmm0,%xmm0
  addss  %xmm0,%xmm1
  movaps %xmm0,%xmm2
  shufps $0x55,%xmm0,%xmm2
  addss  %xmm2,%xmm1
  movaps %xmm0,%xmm2
  unpckhps %xmm0,%xmm2
  shufps $0xff,%xmm0,%xmm0
  addss  %xmm2,%xmm1
  addss  %xmm0,%xmm1
  cmp    $0x1,%edx
  je     L89
  movdqu -0x10(%rax),%xmm4
  pshufd $0x1b,%xmm4,%xmm0
  cvtdq2ps %xmm0,%xmm0
  addss  %xmm0,%xmm1
  movaps %xmm0,%xmm2
  shufps $0x55,%xmm0,%xmm2
  addss  %xmm2,%xmm1
  movaps %xmm0,%xmm2
  unpckhps %xmm0,%xmm2
  shufps $0xff,%xmm0,%xmm0
  addss  %xmm2,%xmm1
  addss  %xmm0,%xmm1
  cmp    $0x2,%edx
  je     L89
  movdqu -0x20(%rax),%xmm5
  pshufd $0x1b,%xmm5,%xmm0
  cvtdq2ps %xmm0,%xmm0
  addss  %xmm0,%xmm1
  movaps %xmm0,%xmm2
  shufps $0x55,%xmm0,%xmm2
  addss  %xmm2,%xmm1
  movaps %xmm0,%xmm2
  unpckhps %xmm0,%xmm2
  shufps $0xff,%xmm0,%xmm0
  addss  %xmm2,%xmm1
  addss  %xmm0,%xmm1
  cmp    $0x3,%edx
  je     L89
  movdqu -0x30(%rax),%xmm6
  pshufd $0x1b,%xmm6,%xmm0
  cvtdq2ps %xmm0,%xmm0
  addss  %xmm0,%xmm1
  movaps %xmm0,%xmm2
  shufps $0x55,%xmm0,%xmm2
  addss  %xmm2,%xmm1
  movaps %xmm0,%xmm2
  unpckhps %xmm0,%xmm2
  shufps $0xff,%xmm0,%xmm0
  addss  %xmm2,%xmm1
  addss  %xmm0,%xmm1
  cmp    $0x5,%edx
  jne    L89
  movdqu -0x40(%rax),%xmm0
  pshufd $0x1b,%xmm0,%xmm0
  cvtdq2ps %xmm0,%xmm0
  addss  %xmm0,%xmm1
  movaps %xmm0,%xmm2
  shufps $0x55,%xmm0,%xmm2
  addss  %xmm2,%xmm1
  movaps %xmm0,%xmm2
  unpckhps %xmm0,%xmm2
  shufps $0xff,%xmm0,%xmm0
  addss  %xmm2,%xmm1
  addss  %xmm0,%xmm1
L25:
  cmp    $0x1,%r15d
  je     L177
  pxor   %xmm0,%xmm0
  lea    D39(%rip),%rdi
  mov    $0x1,%eax
  cvtsi2ss %r15d,%xmm0
  lea    D57(%rip),%r13
  lea    D51(%rip),%rbp
  divss  %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  movss  %xmm1,0xc(%rsp)
  cvtss2sd %xmm1,%xmm0
  call   <printf@plt>
  lea    -0x1(%r15),%eax
  movss  0xc(%rsp),%xmm1
  lea    0x18(%rsp,%rax,4),%rbx
  jmp    L18
  nop
L155:
  comiss %xmm1,%xmm0
  ja     L190
L91:
  add    $0x4,%r12
  cmp    %rbx,%r12
  je     L6
L18:
  mov    (%r12),%esi
  pxor   %xmm0,%xmm0
  cvtsi2ss %esi,%xmm0
  ucomiss %xmm1,%xmm0
  jp     L155
  jne    L155
  mov    %rbp,%rdi
  xor    %eax,%eax
  add    $0x4,%r12
  movss  %xmm1,0xc(%rsp)
  call   <printf@plt>
  movss  0xc(%rsp),%xmm1
  cmp    %rbx,%r12
  jne    L18
L6:
  mov    0x68(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L97
  add    $0x78,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   (%rax)
L190:
  mov    %r13,%rdi
  xor    %eax,%eax
  movss  %xmm1,0xc(%rsp)
  call   <printf@plt>
  movss  0xc(%rsp),%xmm1
  jmp    L91
L89:
  mov    %ebx,%edx
  mov    %r15d,%eax
  and    $0xfffffffc,%edx
  sub    %edx,%eax
  cmp    %ebx,%edx
  je     L25
L43:
  movslq %eax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2ssl 0x10(%rsp,%rdx,4),%xmm0
  mov    %eax,%edx
  addss  %xmm0,%xmm1
  sub    $0x1,%edx
  je     L25
  movslq %edx,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2ssl 0x10(%rsp,%rdx,4),%xmm0
  addss  %xmm0,%xmm1
  sub    $0x2,%eax
  je     L25
  cltq
  pxor   %xmm0,%xmm0
  cvtsi2ssl 0x10(%rsp,%rax,4),%xmm0
  addss  %xmm0,%xmm1
  jmp    L25
L165:
  lea    D29(%rip),%rdi
  mov    $0x14,%r15d
  call   <puts@plt>
  jmp    L235
L177:
  lea    D42(%rip),%rdi
  call   <puts@plt>
  jmp    L6
L72:
  pxor   %xmm0,%xmm0
  lea    D39(%rip),%rdi
  mov    $0x1,%eax
  divss  %xmm0,%xmm0
  cvtss2sd %xmm0,%xmm0
  call   <printf@plt>
  jmp    L6
L187:
  mov    %ebx,%eax
  pxor   %xmm1,%xmm1
  jmp    L43
L97:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: read_data
arguments: tag: D24
type_guessed: string
name: read_data
arguments: tag: D67
type_guessed: string
name: read_data
arguments: tag: D39
type_guessed: string
name: read_data
arguments: tag: D57
type_guessed: string
name: read_data
arguments: tag: D51
type_guessed: string
name: read_data
arguments: tag: D29
type_guessed: string
name: read_data
arguments: tag: D42
type_guessed: string

tool: D24: Digite um valor inteiro: 

tool: D67: %d

tool: D39: 
Media e: %3.1f


tool: D57: 
%d e maior que a media

tool: D51: 
%d e igual a media

tool: D29: 
Limite maximo atingido!

tool: D42: 
Por favor, digite mais de um valor.

assistant: ```c
main() {
  int numero[21], i = 0, fim = 0, total_valores;
  float media = 0;
  do {
    i++;
    if (i <= 20) {
      printf("Digite um valor inteiro: ");
      scanf("%d", &numero[i]);
      if (numero[i] == 0) {
        i--;
        fim = 1;
      }
    } else {
      printf("\nLimite maximo atingido!\n");
      i--;
      fim = 1;
    }
  } while (fim == 0);
  total_valores = i;
  while (i >= 1) {
    media = media + numero[i];
    i--;
  }
  if (total_valores != 1) {
    media = (float)media / total_valores;
    printf("\nMedia e: %3.1f\n", media);
    for (i = 1; i <= total_valores; i++) {
      if (numero[i] == media) {
        printf("\n%d e igual a media", numero[i]);
      } else if (numero[i] > media) {
        printf("\n%d e maior que a media", numero[i]);
      }
    }
  } else {
    printf("\nPor favor, digite mais de um valor.\n");
  }
}
```