user: Demonstrate the C code that generates the assembly output below:

```asm
<raices_a>:
  endbr64
  push   %r14
  lea    D25(%rip),%rdi
  lea    D71(%rip),%r14
  push   %r13
  push   %r12
  lea    D62(%rip),%r12
  push   %rbp
  lea    D81(%rip),%rbp
  sub    $0x38,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x28(%rsp)
  xor    %eax,%eax
  lea    0x10(%rsp),%r13
  call   <printf@plt>
  lea    D42(%rip),%rdi
  call   <printf@plt>
  lea    D101(%rip),%rdi
  call   <printf@plt>
  lea    D98(%rip),%rdi
  call   <printf@plt>
  lea    0xc(%rsp),%rsi
  mov    %r12,%rdi
  xor    %eax,%eax
  call   <scanf@plt>
  mov    %r14,%rdi
  call   <printf@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <scanf@plt>
  lea    D82(%rip),%rdi
  call   <printf@plt>
  lea    0x18(%rsp),%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <scanf@plt>
  lea    D29(%rip),%rdi
  call   <printf@plt>
  mov    %r12,%rdi
  lea    0x4(%rsp),%rsi
  xor    %eax,%eax
  call   <scanf@plt>
  lea    D49(%rip),%r12
  mov    %r12,%rdi
  call   <system@plt>
  mov    0xc(%rsp),%eax
  cmp    $0x2,%eax
  je     L5
  cmp    $0x3,%eax
  je     L15
  cmp    $0x1,%eax
  je     L55
  mov    %r12,%rdi
  call   <system@plt>
  lea    D55(%rip),%rdi
  call   <printf@plt>
  xor    %eax,%eax
  call   <raices_a>
L33:
  mov    0x28(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L49
  add    $0x38,%rsp
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
  nopl   0x0(%rax)
L5:
  mov    0x4(%rsp),%esi
  movsd  0x18(%rsp),%xmm1
  lea    0x8(%rsp),%rdx
  lea    0x20(%rsp),%rdi
  movsd  0x10(%rsp),%xmm0
  call   <newtonrap@plt>
  jmp    L33
  nopl   0x0(%rax)
L55:
  mov    0x4(%rsp),%esi
  movsd  0x18(%rsp),%xmm1
  lea    0x8(%rsp),%rdx
  lea    0x20(%rsp),%rdi
  movsd  0x10(%rsp),%xmm0
  call   <pfijo@plt>
  jmp    L33
  nopl   0x0(%rax)
L15:
  mov    %r14,%rdi
  call   <printf@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <scanf@plt>
  mov    0x4(%rsp),%esi
  movsd  0x18(%rsp),%xmm2
  lea    0x8(%rsp),%rdx
  movsd  0x10(%rsp),%xmm0
  lea    0x20(%rsp),%rdi
  pxor   %xmm1,%xmm1
  call   <secante@plt>
  jmp    L33
L49:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_tag: D25
type: string
name: parse_data
arguments: data_tag: D71
type: string
name: parse_data
arguments: data_tag: D62
type: string
name: parse_data
arguments: data_tag: D81
type: string
name: parse_data
arguments: data_tag: D42
type: string
name: parse_data
arguments: data_tag: D101
type: string
name: parse_data
arguments: data_tag: D98
type: string
name: parse_data
arguments: data_tag: D82
type: string
name: parse_data
arguments: data_tag: D29
type: string
name: parse_data
arguments: data_tag: D49
type: string
name: parse_data
arguments: data_tag: D55
type: string

tool: D25: Elegir el metodo


tool: D71: 
Dar el valor inical X0: 

tool: D62: %d

tool: D81: %lf

tool: D42: 1.- Puntofijo


tool: D101: 2.- Newton Rapson


tool: D98: 3.- Secante 


tool: D82: 
Dar el valor maximo del error es: 

tool: D29: 
Dar el numero max de iteraciones imax: 

tool: D49: cls

tool: D55: Opcion incorrecta, introducir una opcion correcta

assistant: ```c
void raices_a() {
  double x0, es, ea, xl = 0, raiz;
  int imax, iter, metodo;
  printf("Elegir el metodo\n");
  printf("1.- Puntofijo\n");
  printf("2.- Newton Rapson\n");
  printf("3.- Secante \n");
  scanf("%d", &metodo);
  printf("\nDar el valor inical X0: ");
  scanf("%lf", &x0);
  printf("\nDar el valor maximo del error es: ");
  scanf("%lf", &es);
  printf("\nDar el numero max de iteraciones imax: ");
  scanf("%d", &imax);
  system("cls");
  switch (metodo) {
  case 1:
    raiz = pfijo(x0, es, &ea, imax, &iter);
    break;
  case 2:
    raiz = newtonrap(x0, es, &ea, imax, &iter);
    break;
  case 3:
    printf("\nDar el valor inical X0: ");
    scanf("%lf", &x0);
    raiz = secante(x0, xl, es, &ea, imax, &iter);
    break;
  default:
    system("cls");
    printf("Opcion incorrecta, introducir una opcion correcta");
    raices_a();
    break;
  }
}
```