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

```asm
<main>:
  endbr64
  push   %r15
  pxor   %xmm7,%xmm7
  push   %r14
  movapd %xmm7,%xmm3
  movq   %xmm7,%r15
  movapd %xmm7,%xmm2
  push   %r13
  lea    D82(%rip),%r14
  lea    D146(%rip),%r13
  push   %r12
  xor    %r12d,%r12d
  push   %rbp
  xor    %ebp,%ebp
  push   %rbx
  xor    %ebx,%ebx
  sub    $0x28,%rsp
  mov    D180(%rip),%rax
  movsd  %xmm7,(%rsp)
  movq   %rax,%xmm1
L27:
  mov    %ebx,%eax
  pxor   %xmm0,%xmm0
  movapd %xmm2,%xmm4
  add    $0x1,%ebx
  cvtsi2sd %rax,%xmm0
  subsd  %xmm3,%xmm4
  add    $0x1,%r12d
  mov    %ebx,%edx
  mov    %r12d,%esi
  mov    %r14,%rdi
  mov    $0x1,%eax
  movsd  %xmm1,0x10(%rsp)
  movsd  %xmm2,0x8(%rsp)
  mulsd  %xmm4,%xmm0
  addsd  (%rsp),%xmm0
  movsd  %xmm0,(%rsp)
  movapd %xmm2,%xmm0
  call   <printf@plt>
  mov    D173(%rip),%rax
  movq   %rax,%xmm0
  call   <expVA@plt>
  movsd  0x8(%rsp),%xmm2
  cmp    $0x1,%ebx
  movsd  0x10(%rsp),%xmm1
  movapd %xmm2,%xmm3
  addsd  %xmm0,%xmm2
  je     L23
  movsd  D180(%rip),%xmm6
  comisd %xmm3,%xmm6
  jbe    L84
L10:
  comisd %xmm2,%xmm1
  ja     L27
L69:
  movapd %xmm1,%xmm0
  mov    %ebx,%eax
  add    $0x1,%ebp
  sub    $0x1,%ebx
  subsd  %xmm3,%xmm0
  pxor   %xmm3,%xmm3
  mov    %ebx,%edx
  mov    %ebp,%esi
  cvtsi2sd %rax,%xmm3
  mov    %r13,%rdi
  mov    $0x1,%eax
  movsd  %xmm2,0x10(%rsp)
  movsd  %xmm1,0x8(%rsp)
  mulsd  %xmm3,%xmm0
  addsd  (%rsp),%xmm0
  movsd  %xmm0,(%rsp)
  movapd %xmm1,%xmm0
  call   <printf@plt>
  test   %ebx,%ebx
  movsd  0x8(%rsp),%xmm1
  movsd  0x10(%rsp),%xmm2
  jne    L43
  movsd  D180(%rip),%xmm6
  movq   %r15,%xmm0
  addsd  %xmm1,%xmm0
  subsd  0x18(%rsp),%xmm0
  comisd %xmm1,%xmm6
  movq   %xmm0,%r15
  jbe    L88
  movapd %xmm6,%xmm0
L28:
  movapd %xmm1,%xmm3
  movapd %xmm0,%xmm1
  comisd %xmm2,%xmm1
  jbe    L69
  jmp    L27
  nopw   0x0(%rax,%rax,1)
L43:
  mov    D246(%rip),%rax
  movq   %rax,%xmm0
  call   <expVA@plt>
  movsd  0x8(%rsp),%xmm1
  movsd  D180(%rip),%xmm5
  movsd  0x10(%rsp),%xmm2
  comisd %xmm1,%xmm5
  addsd  %xmm1,%xmm0
  ja     L28
L88:
  mov    %ebp,%eax
  pxor   %xmm0,%xmm0
  movsd  (%rsp),%xmm6
  lea    D210(%rip),%r12
  cvtsi2sd %rax,%xmm0
  mov    %r12,%rdi
  movsd  %xmm1,(%rsp)
  divsd  %xmm1,%xmm6
  divsd  %xmm1,%xmm0
  movq   %xmm6,%rbx
  movsd  %xmm0,0x8(%rsp)
  call   <puts@plt>
  lea    D4(%rip),%rdi
  call   <puts@plt>
  mov    %r12,%rdi
  call   <puts@plt>
  mov    D180(%rip),%rax
  lea    D0(%rip),%rdi
  movq   %rax,%xmm0
  mov    $0x1,%eax
  call   <printf@plt>
  mov    %r12,%rdi
  call   <puts@plt>
  lea    D38(%rip),%rdi
  call   <puts@plt>
  movsd  D194(%rip),%xmm0
  mov    $0x1,%eax
  lea    D5(%rip),%rdi
  call   <printf@plt>
  movsd  D85(%rip),%xmm0
  mov    $0x1,%eax
  lea    D218(%rip),%rdi
  call   <printf@plt>
  mov    %r12,%rdi
  call   <puts@plt>
  lea    D93(%rip),%rdi
  call   <puts@plt>
  mov    %ebp,%esi
  lea    D116(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  movsd  0x8(%rsp),%xmm0
  mov    $0x1,%eax
  lea    D39(%rip),%rdi
  call   <printf@plt>
  movsd  (%rsp),%xmm1
  movq   %r15,%xmm6
  movsd  D96(%rip),%xmm0
  lea    D48(%rip),%rdi
  mov    $0x1,%eax
  divsd  %xmm1,%xmm6
  mulsd  %xmm6,%xmm0
  call   <printf@plt>
  movq   %rbx,%xmm0
  mov    $0x1,%eax
  lea    D200(%rip),%rdi
  call   <printf@plt>
  movq   %rbx,%xmm7
  mov    $0x1,%eax
  divsd  0x8(%rsp),%xmm7
  lea    D52(%rip),%rdi
  movapd %xmm7,%xmm0
  call   <printf@plt>
  mov    %r12,%rdi
  call   <puts@plt>
  add    $0x28,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L23:
  mov    D246(%rip),%rax
  movsd  %xmm3,0x10(%rsp)
  movsd  %xmm2,0x8(%rsp)
  movq   %rax,%xmm0
  call   <expVA@plt>
  movsd  0x10(%rsp),%xmm3
  movsd  D180(%rip),%xmm6
  movapd %xmm0,%xmm1
  movsd  0x8(%rsp),%xmm2
  comisd %xmm3,%xmm6
  addsd  %xmm3,%xmm1
  movsd  %xmm3,0x18(%rsp)
  ja     L10
L84:
  movapd %xmm3,%xmm1
  jmp    L88
```

tool_calls: name: read_data
arguments: data_label: D82
data_type: string
name: read_data
arguments: data_label: D146
data_type: string
name: read_data
arguments: data_label: D180
data_type: f64
name: read_data
arguments: data_label: D173
data_type: byte[8]
name: read_data
arguments: data_label: D246
data_type: f32[2]
name: read_data
arguments: data_label: D210
data_type: string
name: read_data
arguments: data_label: D4
data_type: string
name: read_data
arguments: data_label: D0
data_type: string
name: read_data
arguments: data_label: D38
data_type: string
name: read_data
arguments: data_label: D194
data_type: f64
name: read_data
arguments: data_label: D5
data_type: string
name: read_data
arguments: data_label: D85
data_type: f64
name: read_data
arguments: data_label: D218
data_type: string
name: read_data
arguments: data_label: D93
data_type: string
name: read_data
arguments: data_label: D116
data_type: string
name: read_data
arguments: data_label: D39
data_type: string
name: read_data
arguments: data_label: D96
data_type: f64
name: read_data
arguments: data_label: D48
data_type: string
name: read_data
arguments: data_label: D200
data_type: string
name: read_data
arguments: data_label: D52
data_type: string

tool: D82: Llegada de mensaje %u en T= %.3f sec --- Paquetes en Concentrador: %u


tool: D146: Termina mensaje %u en T= %.3f sec --- Paquetes en Concentrador: %u


tool: D180: 1000

tool: {"D173": [0x92,0x24,0x49,0x92,0x24,0x49,0xc2,0x3f]}

tool: {"D246": [0.0,1.5]}

tool: D210: =============================================================== 

tool: D4: =            *** Resultadso de Simulacion MM1 ***             = 

tool: D0: =  Tiempo total simulado                    = %.2f s  


tool: D38: =  Parametros de sistema:                                       

tool: D194: 7

tool: D5: =    Razon de llegada de paquetes           = %.2f paq/s 


tool: D85: 8

tool: D218: =    Razon de servicio de los paquetes      = %.2f paq/s 


tool: D93: =  Resultados:                                                  

tool: D116: =    Numero de paquetes atendidos           = %d paq         


tool: D39: =    Throughput                             = %.2f paq/s     


tool: D96: 100

tool: D48: =    Utilizacion                            = %.2f %% 


tool: D200: =    Numero promedio de paquetes en sistema = %.2f paq       


tool: D52: =    Tiempo promedio de estancia en sistema = %.2f s         


assistant: ```c
int main(void) {
  double end_time = 1.0e3;
  double Ta = 1.0 / 7;
  double Ts = 1.0 / 8;
  double time = 0.0;
  double tarr = 0.0;
  double tdep = 1.0e3;
  unsigned int n = 0;
  unsigned int id = 0;
  unsigned int id2 = 0;
  unsigned int c = 0;
  double b = 0.0;
  double s = 0.0;
  double tn = time;
  double tb;
  double x;
  double u;
  double l;
  double w;
  while (time < end_time) {
    if (tarr < tdep) {
      time = tarr;
      s = s + n * (time - tn);
      n++;
      id++;
      tn = time;
      printf("Llegada de mensaje %u en T= %.3f sec --- Paquetes en Concentrador: %u\n", id, time, n);
      tarr = time + expVA(Ta);
      if (n == 1) {
        tb = time;
        tdep = time + expVA(Ts);
      }
    } else {
      time = tdep;
      s = s + n * (time - tn);
      n--;
      tn = time;
      id2++;
      printf("Termina mensaje %u en T= %.3f sec --- Paquetes en Concentrador: %u\n", id2, time, n);
      c++;
      if (n > 0)
        tdep = time + expVA(Ts);
      else {
        tdep = 1.0e3;
        b = b + time - tb;
      }
    }
  }
  x = c / time;
  u = b / time;
  l = s / time;
  w = l / x;
  printf("=============================================================== \n");
  printf("=            *** Resultadso de Simulacion MM1 ***             = \n");
  printf("=============================================================== \n");
  printf("=  Tiempo total simulado                    = %.2f s  \n", end_time);
  printf("=============================================================== \n");
  printf("=  Parametros de sistema:                                       \n");
  printf("=    Razon de llegada de paquetes           = %.2f paq/s \n", 1.0 / Ta);
  printf("=    Razon de servicio de los paquetes      = %.2f paq/s \n", 1.0 / Ts);
  printf("=============================================================== \n");
  printf("=  Resultados:                                                  \n");
  printf("=    Numero de paquetes atendidos           = %d paq         \n", c);
  printf("=    Throughput                             = %.2f paq/s     \n", x);
  printf("=    Utilizacion                            = %.2f %% \n", 100.0 * u);
  printf("=    Numero promedio de paquetes en sistema = %.2f paq       \n", l);
  printf("=    Tiempo promedio de estancia en sistema = %.2f s         \n", w);
  printf("=============================================================== \n");
}
```