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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x58,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  movl   $0x1,-0x48(%rbp)
  movl   $0x0,-0x44(%rbp)
  movl   $0x0,-0x40(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x38(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x34(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x30(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x2c(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x28(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x24(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x20(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x1c(%rbp)
  lea    -0x48(%rbp),%rax
  mov    %rax,%rsi
  lea    D21(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  jmp    L12
L24:
  movl   $0x0,-0x3c(%rbp)
  jmp    L42
L47:
  lea    -0x40(%rbp),%rdx
  lea    -0x44(%rbp),%rax
  mov    %rax,%rsi
  lea    D3(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  mov    -0x44(%rbp),%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movss  -0x38(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x38(%rbp)
  mov    -0x40(%rbp),%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movss  -0x34(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x34(%rbp)
  mov    -0x44(%rbp),%edx
  mov    -0x40(%rbp),%eax
  imul   %edx,%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movss  -0x30(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x30(%rbp)
  mov    -0x44(%rbp),%edx
  mov    -0x44(%rbp),%eax
  imul   %edx,%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movss  -0x2c(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x2c(%rbp)
  mov    -0x40(%rbp),%edx
  mov    -0x40(%rbp),%eax
  imul   %edx,%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movss  -0x28(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x28(%rbp)
  addl   $0x1,-0x3c(%rbp)
L42:
  mov    -0x48(%rbp),%eax
  cmp    %eax,-0x3c(%rbp)
  jl     L47
  mov    -0x48(%rbp),%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  mulss  -0x30(%rbp),%xmm0
  movss  -0x38(%rbp),%xmm1
  movaps %xmm1,%xmm2
  mulss  -0x34(%rbp),%xmm2
  movaps %xmm0,%xmm1
  subss  %xmm2,%xmm1
  mov    -0x48(%rbp),%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movaps %xmm0,%xmm2
  mulss  -0x2c(%rbp),%xmm2
  movss  -0x38(%rbp),%xmm0
  mulss  %xmm0,%xmm0
  subss  %xmm0,%xmm2
  divss  %xmm2,%xmm1
  movaps %xmm1,%xmm0
  movss  %xmm0,-0x24(%rbp)
  movss  -0x34(%rbp),%xmm0
  mulss  -0x2c(%rbp),%xmm0
  movss  -0x38(%rbp),%xmm1
  movaps %xmm1,%xmm2
  mulss  -0x30(%rbp),%xmm2
  movaps %xmm0,%xmm1
  subss  %xmm2,%xmm1
  mov    -0x48(%rbp),%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movaps %xmm0,%xmm2
  mulss  -0x2c(%rbp),%xmm2
  movss  -0x38(%rbp),%xmm0
  mulss  %xmm0,%xmm0
  subss  %xmm0,%xmm2
  divss  %xmm2,%xmm1
  movaps %xmm1,%xmm0
  movss  %xmm0,-0x20(%rbp)
  mov    -0x48(%rbp),%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  mulss  -0x30(%rbp),%xmm0
  movss  -0x38(%rbp),%xmm1
  mulss  -0x34(%rbp),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x54(%rbp)
  mov    -0x48(%rbp),%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x2c(%rbp),%xmm1
  movss  -0x38(%rbp),%xmm0
  mulss  %xmm0,%xmm0
  subss  %xmm0,%xmm1
  cvttss2si %xmm1,%eax
  mov    %eax,%edi
  call   <sqrt@plt>
  mov    %eax,%ebx
  mov    -0x48(%rbp),%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x28(%rbp),%xmm1
  movss  -0x34(%rbp),%xmm0
  mulss  %xmm0,%xmm0
  subss  %xmm0,%xmm1
  cvttss2si %xmm1,%eax
  mov    %eax,%edi
  call   <sqrt@plt>
  imul   %ebx,%eax
  pxor   %xmm1,%xmm1
  cvtsi2ss %eax,%xmm1
  movss  -0x54(%rbp),%xmm0
  divss  %xmm1,%xmm0
  movss  %xmm0,-0x1c(%rbp)
  movss  -0x1c(%rbp),%xmm1
  movss  -0x20(%rbp),%xmm0
  mov    -0x24(%rbp),%eax
  movaps %xmm1,%xmm2
  movaps %xmm0,%xmm1
  movd   %eax,%xmm0
  lea    D7(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x38(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x34(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x30(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x2c(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x28(%rbp)
  lea    -0x48(%rbp),%rax
  mov    %rax,%rsi
  lea    D21(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
L12:
  mov    -0x48(%rbp),%eax
  test   %eax,%eax
  jne    L24
  mov    $0x0,%eax
  mov    -0x18(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L5
  call   <__stack_chk_fail@plt>
L5:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: data_label: D21
datatype: string
name: retrieve_data
arguments: data_label: D3
datatype: string
name: retrieve_data
arguments: data_label: D7
datatype: string

tool: D21: %d

tool: D3: %d %d


tool: D7: a = %.2f, b = %.2f, R = %.2f


assistant: ```c
int main() {
  int i, n = 1, x = 0, y = 0;
  float Sx = 0, Sy = 0, Sxy = 0, Sxx = 0, Syy = 0, a = 0, b = 0, r = 0;
  scanf("%d", &n);
  while (n != 0) {
    for (i = 0; i < n; ++i) {
      scanf("%d %d\n", &x, &y);
      Sx = Sx + x;
      Sy = Sy + y;
      Sxy = Sxy + (x * y);
      Sxx = Sxx + (x * x);
      Syy = Syy + (y * y);
    }
    a = (n * Sxy - Sx * Sy) / (n * Sxx - Sx * Sx);
    b = (Sy * Sxx - Sx * Sxy) / (n * Sxx - (Sx * Sx));
    r = (n * Sxy - Sx * Sy) / (sqrt(n * Sxx - (Sx * Sx)) * sqrt(n * Syy - (Sy * Sy)));
    printf("a = %.2f, b = %.2f, R = %.2f\n", a, b, r);
    Sx = 0;
    Sy = 0;
    Sxy = 0;
    Sxx = 0;
    Syy = 0;
    scanf("%d", &n);
  }
  return 0;
}
```