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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x1a0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0xc0(%rbp)
  movsd  D0(%rip),%xmm0
  movsd  %xmm0,-0xb8(%rbp)
  movsd  D17(%rip),%xmm0
  movsd  %xmm0,-0xb0(%rbp)
  movsd  D119(%rip),%xmm0
  movsd  %xmm0,-0xa8(%rbp)
  movsd  D71(%rip),%xmm0
  movsd  %xmm0,-0xa0(%rbp)
  movsd  D92(%rip),%xmm0
  movsd  %xmm0,-0x90(%rbp)
  movsd  D51(%rip),%xmm0
  movsd  %xmm0,-0x88(%rbp)
  movsd  D149(%rip),%xmm0
  movsd  %xmm0,-0x80(%rbp)
  movsd  D39(%rip),%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movsd  D134(%rip),%xmm0
  movsd  %xmm0,-0x70(%rbp)
  mov    $0x28,%edi
  call   <malloc@plt>
  mov    %rax,-0x190(%rbp)
  movl   $0x0,-0x19c(%rbp)
  jmp    L15
L21:
  mov    $0x14,%edi
  call   <malloc@plt>
  mov    -0x19c(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x190(%rbp),%rdx
  add    %rcx,%rdx
  mov    %rax,(%rdx)
  addl   $0x1,-0x19c(%rbp)
L15:
  cmpl   $0x4,-0x19c(%rbp)
  jle    L21
  lea    -0x160(%rbp),%rcx
  lea    -0x90(%rbp),%rdx
  lea    -0xc0(%rbp),%rsi
  lea    -0x180(%rbp),%rax
  mov    %rax,%rdi
  call   <inicializaciones@plt>
  lea    -0x160(%rbp),%rdx
  lea    -0x30(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <iniB@plt>
  lea    -0x180(%rbp),%rdx
  mov    -0x190(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <iniMatriz@plt>
  lea    -0x60(%rbp),%rdx
  lea    -0x30(%rbp),%rcx
  mov    -0x190(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <solSistema@plt>
  movl   $0x0,-0x19c(%rbp)
  jmp    L33
L27:
  mov    -0x19c(%rbp),%eax
  add    $0x1,%eax
  cltq
  movsd  -0x60(%rbp,%rax,8),%xmm0
  mov    -0x19c(%rbp),%eax
  cltq
  movsd  -0x60(%rbp,%rax,8),%xmm1
  subsd  %xmm1,%xmm0
  mov    -0x19c(%rbp),%eax
  cltq
  movsd  -0x180(%rbp,%rax,8),%xmm2
  movsd  D72(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  mov    -0x19c(%rbp),%eax
  cltq
  movsd  %xmm0,-0x140(%rbp,%rax,8)
  mov    -0x19c(%rbp),%eax
  cltq
  movsd  -0x60(%rbp,%rax,8),%xmm0
  movsd  D0(%rip),%xmm1
  divsd  %xmm1,%xmm0
  mov    -0x19c(%rbp),%eax
  cltq
  movsd  %xmm0,-0x120(%rbp,%rax,8)
  mov    -0x19c(%rbp),%eax
  cltq
  movsd  -0x160(%rbp,%rax,8),%xmm1
  mov    -0x19c(%rbp),%eax
  cltq
  movsd  -0x60(%rbp,%rax,8),%xmm0
  movapd %xmm0,%xmm2
  addsd  %xmm0,%xmm2
  mov    -0x19c(%rbp),%eax
  add    $0x1,%eax
  cltq
  movsd  -0x60(%rbp,%rax,8),%xmm0
  addsd  %xmm2,%xmm0
  movsd  D72(%rip),%xmm3
  movapd %xmm0,%xmm2
  divsd  %xmm3,%xmm2
  mov    -0x19c(%rbp),%eax
  cltq
  movsd  -0x180(%rbp,%rax,8),%xmm0
  mulsd  %xmm0,%xmm2
  subsd  %xmm2,%xmm1
  movapd %xmm1,%xmm0
  mov    -0x19c(%rbp),%eax
  cltq
  movsd  %xmm0,-0x100(%rbp,%rax,8)
  mov    -0x19c(%rbp),%eax
  cltq
  movsd  -0x90(%rbp,%rax,8),%xmm0
  mov    -0x19c(%rbp),%eax
  cltq
  movsd  %xmm0,-0xe0(%rbp,%rax,8)
  addl   $0x1,-0x19c(%rbp)
L33:
  cmpl   $0x3,-0x19c(%rbp)
  jle    L27
  lea    D77(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x198(%rbp),%rax
  mov    %rax,%rsi
  lea    D87(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  mov    -0x198(%rbp),%rax
  lea    -0xe0(%rbp),%r8
  lea    -0x100(%rbp),%rcx
  lea    -0x120(%rbp),%rdx
  lea    -0x140(%rbp),%rsi
  lea    -0xc0(%rbp),%rdi
  movq   %rax,%xmm0
  call   <spline@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x188(%rbp)
  mov    -0x188(%rbp),%rax
  movq   %rax,%xmm0
  lea    D153(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  lea    D9(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L18
  call   <__stack_chk_fail@plt>
L18:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D0
data_type: byte[8]
name: disassemble_data
arguments: data_tag: D17
data_type: byte[8]
name: disassemble_data
arguments: data_tag: D119
data_type: byte[8]
name: disassemble_data
arguments: data_tag: D71
data_type: f64
name: disassemble_data
arguments: data_tag: D92
data_type: f64
name: disassemble_data
arguments: data_tag: D51
data_type: f64
name: disassemble_data
arguments: data_tag: D149
data_type: f64
name: disassemble_data
arguments: data_tag: D39
data_type: f64
name: disassemble_data
arguments: data_tag: D134
data_type: f64
name: disassemble_data
arguments: data_tag: D72
data_type: byte[8]
name: disassemble_data
arguments: data_tag: D77
data_type: string
name: disassemble_data
arguments: data_tag: D87
data_type: string
name: disassemble_data
arguments: data_tag: D153
data_type: string
name: disassemble_data
arguments: data_tag: D9
data_type: string

tool: {"D0": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40]}

tool: {"D17": [0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x40]}

tool: {"D119": [0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x40]}

tool: D71: 6.1

tool: D92: 2.51

tool: D51: 4.04

tool: D149: 4.7

tool: D39: 5.54

tool: D134: 5.8

tool: {"D72": [0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x40]}

tool: D77: dame el punto a estimar-->
 x:

tool: D87: %lf

tool: D153: estimacion--> %lf


tool: D9: PAUSE

assistant: ```c
int main() {
  double X[5] = {0, 2, 3, 5, 6.1};
  double Y[5] = {2.51, 4.04, 4.7, 5.54, 5.8};
  double h[5 - 1];
  double A[5 - 1];
  double a[5 - 1];
  double b[5 - 1];
  double c[5 - 1];
  double d[5 - 1];
  double **matriz;
  double v[5];
  double B[5];
  double x;
  double estimacion;
  int i;
  matriz = (double **)malloc(5 * sizeof(int *));
  for (i = 0; i < 5; i++)
    matriz[i] = (double *)malloc(5 * sizeof(int));
  inicializaciones(h, X, Y, A);
  iniB(B, A);
  iniMatriz(matriz, h);
  solSistema(matriz, B, v);
  for (i = 0; i < 5 - 1; i++) {
    a[i] = (v[i + 1] - v[i]) / (6 * h[i]);
    b[i] = v[i] / 2;
    c[i] = A[i] - ((2 * v[i] + v[i + 1]) / 6) * h[i];
    d[i] = Y[i];
  }
  printf("dame el punto a estimar-->\n x:");
  scanf("%lf", &x);
  getchar();
  estimacion = spline(x, X, a, b, c, d);
  printf("estimacion--> %lf\n", estimacion);
  getchar();
  system("PAUSE");
  return 0;
}
```