user: 请将以下的汇编代码转换成C语言代码：

```asm
<loop>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x98,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x88(%rsp)
  xor    %eax,%eax
  lea    D16(%rip),%rdi
  call   <readDbl@plt>
  movsd  %xmm0,(%rsp)
  lea    D166(%rip),%rdi
  call   <readDbl@plt>
  movq   %xmm0,%rbp
  lea    D143(%rip),%rdi
  call   <readDbl@plt>
  lea    D186(%rip),%rdi
  call   <readDbl@plt>
  movq   %xmm0,%r12
  movq   $0x0,0x30(%rsp)
  movq   $0x0,0x38(%rsp)
  movsd  D57(%rip),%xmm0
  movsd  %xmm0,0x40(%rsp)
  movq   $0x0,0x48(%rsp)
  movsd  %xmm0,0x50(%rsp)
  movsd  D84(%rip),%xmm0
  movsd  %xmm0,0x58(%rsp)
  mov    D0(%rip),%rax
  mov    %rax,0x60(%rsp)
  mov    D56(%rip),%rax
  mov    %rax,0x68(%rsp)
  movq   $0x0,0x70(%rsp)
  movsd  %xmm0,0x78(%rsp)
  mov    $0x32,%edi
  call   <beginScene@plt>
  mov    $0xff,%r8d
  mov    $0xff,%ecx
  mov    $0x0,%edx
  mov    $0x0,%esi
  lea    D20(%rip),%rbx
  mov    %rbx,%rdi
  call   <setColor@plt>
  mov    D56(%rip),%rax
  movq   %rax,%xmm0
  mov    %rbx,%rdi
  call   <setStroke@plt>
  lea    0x30(%rsp),%r13
  mov    %r13,%r14
  mov    $0x0,%ebx
  lea    D20(%rip),%r15
L38:
  add    $0x1,%ebx
  movslq %ebx,%rax
  imul   $0x66666667,%rax,%rax
  sar    $0x21,%rax
  mov    %ebx,%edx
  sar    $0x1f,%edx
  sub    %edx,%eax
  lea    (%rax,%rax,4),%edx
  mov    %ebx,%eax
  sub    %edx,%eax
  cltq
  shl    $0x4,%rax
  movsd  0x38(%rsp,%rax,1),%xmm3
  movsd  0x30(%rsp,%rax,1),%xmm2
  movsd  0x8(%r14),%xmm1
  movsd  (%r14),%xmm0
  mov    %r15,%rdi
  call   <drawLine@plt>
  add    $0x10,%r14
  cmp    $0x5,%ebx
  jne    L38
  mov    $0x0,%eax
  call   <endScene@plt>
  movl   $0x0,0x1c(%rsp)
  lea    D37(%rip),%r15
L7:
  addl   $0x1,0x1c(%rsp)
  mov    0x1c(%rsp),%ecx
  movslq %ecx,%rax
  imul   $0x66666667,%rax,%rax
  sar    $0x21,%rax
  mov    %ecx,%edx
  sar    $0x1f,%edx
  sub    %edx,%eax
  lea    (%rax,%rax,4),%edx
  mov    %ecx,%eax
  sub    %edx,%eax
  mov    $0x0,%ebx
  cltq
  shl    $0x4,%rax
  lea    0x90(%rax),%rax
  lea    (%rsp,%rax,1),%r14
L6:
  pxor   %xmm0,%xmm0
  cvtsi2sd %ebx,%xmm0
  divsd  D83(%rip),%xmm0
  movsd  D27(%rip),%xmm1
  subsd  %xmm0,%xmm1
  movapd %xmm1,%xmm3
  mulsd  0x0(%r13),%xmm3
  movapd %xmm0,%xmm2
  mulsd  -0x60(%r14),%xmm2
  addsd  %xmm2,%xmm3
  movsd  %xmm3,0x8(%rsp)
  mulsd  0x8(%r13),%xmm1
  mulsd  -0x58(%r14),%xmm0
  addsd  %xmm0,%xmm1
  movapd %xmm1,%xmm4
  movsd  %xmm1,0x10(%rsp)
  lea    0x28(%rsp),%rsi
  lea    0x20(%rsp),%rdi
  movq   %r12,%xmm2
  movq   %rbp,%xmm1
  movsd  (%rsp),%xmm0
  call   <control_to@plt>
  movsd  0x20(%rsp),%xmm0
  mov    %r15,%rdi
  call   <writeDbl@plt>
  movsd  0x28(%rsp),%xmm0
  lea    D53(%rip),%rdi
  call   <writeDbl@plt>
  movsd  0x10(%rsp),%xmm1
  movsd  0x8(%rsp),%xmm0
  lea    D127(%rip),%rdi
  call   <paintPoint@plt>
  mov    $0x64,%edi
  call   <sleep_ms@plt>
  lea    D16(%rip),%rdi
  call   <readDbl@plt>
  movsd  %xmm0,(%rsp)
  lea    D166(%rip),%rdi
  call   <readDbl@plt>
  movq   %xmm0,%rbp
  lea    D143(%rip),%rdi
  call   <readDbl@plt>
  lea    D186(%rip),%rdi
  call   <readDbl@plt>
  movq   %xmm0,%r12
  add    $0x1,%ebx
  cmp    $0x64,%ebx
  jne    L6
  add    $0x10,%r13
  cmpl   $0x5,0x1c(%rsp)
  jne    L7
  mov    0x88(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L18
  add    $0x98,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L18:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: data_tag: D16
type_infered: string
name: disassemble_data
arguments: data_tag: D166
type_infered: string
name: disassemble_data
arguments: data_tag: D143
type_infered: string
name: disassemble_data
arguments: data_tag: D186
type_infered: string
name: disassemble_data
arguments: data_tag: D57
type_infered: f32[2]
name: disassemble_data
arguments: data_tag: D84
type_infered: f32[2]
name: disassemble_data
arguments: data_tag: D0
type_infered: f32[2]
name: disassemble_data
arguments: data_tag: D56
type_infered: f64
name: disassemble_data
arguments: data_tag: D20
type_infered: string
name: disassemble_data
arguments: data_tag: D37
type_infered: string
name: disassemble_data
arguments: data_tag: D83
type_infered: f64
name: disassemble_data
arguments: data_tag: D27
type_infered: f64
name: disassemble_data
arguments: data_tag: D53
type_infered: string
name: disassemble_data
arguments: data_tag: D127
type_infered: string

tool: D16: robot.px

tool: D166: robot.py

tool: D143: robot.vel

tool: D186: robot.theta

tool: {"D57": [0.0,2.375]}

tool: {"D84": [0.0,2.25]}

tool: {"D0": [0.0,2.125]}

tool: D56: 2

tool: D20: route

tool: D37: thrust

tool: D83: 100

tool: D27: 1

tool: D53: aileron

tool: D127: destine

assistant: ```c
void loop() {
  double px = readDbl("robot.px");
  double py = readDbl("robot.py");
  double vel = readDbl("robot.vel");
  double theta = readDbl("robot.theta");
  int N = 5;
  double waypoints[N][2];
  waypoints[0][0] = 0;
  waypoints[0][1] = 0;
  waypoints[1][0] = 6;
  waypoints[1][1] = 0;
  waypoints[2][0] = 6;
  waypoints[2][1] = 4;
  waypoints[3][0] = 3;
  waypoints[3][1] = 2;
  waypoints[4][0] = 0;
  waypoints[4][1] = 4;
  int n, t;
  beginScene(50);
  setColor("route", 0, 0, 255, 255);
  setStroke("route", 2.0);
  for (n = 0; n < N; n++) {
    t = (n + 1) % N;
    drawLine("route", waypoints[n][0], waypoints[n][1], waypoints[t][0], waypoints[t][1]);
  }
  endScene();
  for (n = 0; n < N; n++) {
    for (t = 0; t < 100; t++) {
      double lambda = t / 100.0;
      double dx = waypoints[n][0] * (1 - lambda) + waypoints[(n + 1) % N][0] * lambda;
      double dy = waypoints[n][1] * (1 - lambda) + waypoints[(n + 1) % N][1] * lambda;
      double thrust, aileron;
      control_to(px, py, theta, dx, dy, &thrust, &aileron);
      writeDbl("thrust", thrust);
      writeDbl("aileron", aileron);
      paintPoint("destine", dx, dy);
      sleep_ms(100);
      px = readDbl("robot.px");
      py = readDbl("robot.py");
      vel = readDbl("robot.vel");
      theta = readDbl("robot.theta");
    }
  }
}
```