user: 请从给定的汇编指令推导出C源代码:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %edi,-0x44(%rbp)
  mov    %rsi,-0x50(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movsd  D61(%rip),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x10(%rbp)
L90:
  lea    -0x38(%rbp),%rax
  mov    %rax,%rsi
  lea    D153(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  movsd  -0x38(%rbp),%xmm0
  movsd  D33(%rip),%xmm1
  ucomisd %xmm1,%xmm0
  jp     L129
  movsd  D33(%rip),%xmm1
  ucomisd %xmm1,%xmm0
  je     L135
L129:
  movsd  -0x30(%rbp),%xmm1
  movsd  D79(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x38(%rbp),%xmm0
  ucomisd D172(%rip),%xmm0
  jp     L96
  ucomisd D172(%rip),%xmm0
  jne    L96
  movsd  -0x28(%rbp),%xmm1
  movsd  D79(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  jmp    L135
L96:
  movsd  -0x38(%rbp),%xmm0
  ucomisd D98(%rip),%xmm0
  jp     L121
  ucomisd D98(%rip),%xmm0
  jne    L121
  movsd  -0x20(%rbp),%xmm1
  movsd  D79(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  jmp    L135
L121:
  movsd  -0x38(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm1,%xmm0
  jp     L135
  pxor   %xmm1,%xmm1
  ucomisd %xmm1,%xmm0
  jne    L135
  movsd  -0x18(%rbp),%xmm1
  movsd  D79(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
L135:
  movsd  -0x38(%rbp),%xmm0
  movsd  D33(%rip),%xmm1
  ucomisd %xmm1,%xmm0
  jp     L90
  movsd  D33(%rip),%xmm1
  ucomisd %xmm1,%xmm0
  je     L0
  jmp    L90
L0:
  movsd  -0x28(%rbp),%xmm0
  addsd  -0x20(%rbp),%xmm0
  movapd %xmm0,%xmm1
  addsd  -0x18(%rbp),%xmm1
  movsd  -0x30(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%esi
  movsd  -0x18(%rbp),%xmm0
  cvttsd2si %xmm0,%ecx
  movsd  -0x20(%rbp),%xmm0
  cvttsd2si %xmm0,%edx
  movsd  -0x28(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  mov    %esi,%r8d
  mov    %eax,%esi
  lea    D95(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movsd  -0x20(%rbp),%xmm0
  comisd -0x28(%rbp),%xmm0
  jb     L82
  lea    D100(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L99
L82:
  lea    D0(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L99:
  movsd  -0x20(%rbp),%xmm1
  movsd  D40(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x28(%rbp),%xmm1
  addsd  -0x20(%rbp),%xmm1
  addsd  -0x18(%rbp),%xmm1
  movapd %xmm0,%xmm2
  divsd  %xmm1,%xmm2
  movsd  -0x28(%rbp),%xmm1
  movsd  D40(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x28(%rbp),%xmm1
  addsd  -0x20(%rbp),%xmm1
  addsd  -0x18(%rbp),%xmm1
  divsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movapd %xmm2,%xmm1
  movq   %rax,%xmm0
  lea    D132(%rip),%rax
  mov    %rax,%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L150
  call   <__stack_chk_fail@plt>
L150:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D61
type_guessed: f32[2]
name: disassemble_data
arguments: data_tag: D153
type_guessed: string
name: disassemble_data
arguments: data_tag: D33
type_guessed: f32[2]
name: disassemble_data
arguments: data_tag: D79
type_guessed: f32[2]
name: disassemble_data
arguments: data_tag: D172
type_guessed: f32[2]
name: disassemble_data
arguments: data_tag: D98
type_guessed: f32[2]
name: disassemble_data
arguments: data_tag: D95
type_guessed: string
name: disassemble_data
arguments: data_tag: D100
type_guessed: string
name: disassemble_data
arguments: data_tag: D0
type_guessed: string
name: disassemble_data
arguments: data_tag: D40
type_guessed: f32[2]
name: disassemble_data
arguments: data_tag: D132
type_guessed: string

tool: {"D61": [0.0,-3.38671875]}

tool: D153: %lf

tool: {"D33": [0.0,-1.875]}

tool: {"D79": [0.0,1.875]}

tool: {"D172": [0.0,3.32421875]}

tool: {"D98": [0.0,3.36328125]}

tool: D95: %d
%d
%d
%d


tool: D100: 93


tool: D0: 83


tool: {"D40": [0.0,3.390625]}

tool: D132: %.2lf
%.2lf


assistant: ```c
int main(int argc, char const *argv[]) {
  double a = -99, v = 0, x = 0, y = 0, z = 0, w = 0;
  do {
    scanf("%lf", &a);
    if (a != -1) {
      v++;
      if (a == 83) {
        x++;
      } else if (a == 93) {
        y++;
      } else if (a == 0) {
        z++;
      }
    }
  } while (a != -1);
  printf("%d\n%d\n%d\n%d\n", (int)x, (int)y, (int)z, (int)(v - (x + y + z)));
  y >= x ? printf("93\n") : printf("83\n");
  printf("%.2lf\n%.2lf\n", (x * 100) / (x + y + z), (y * 100) / (x + y + z));
  return 0;
}
```