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

```asm
<draw_O>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x38,%rsp
  mov    %rdi,-0x38(%rbp)
  mov    %esi,-0x3c(%rbp)
  mov    %edx,-0x40(%rbp)
  movb   $0x4f,-0x21(%rbp)
  movl   $0xfffffff9,-0x20(%rbp)
  jmp    L13
L16:
  movsd  D2(%rip),%xmm0
  mov    D9(%rip),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  mov    %eax,%ebx
  mov    -0x20(%rbp),%eax
  mov    %eax,%edi
  call   <abs@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  movsd  D84(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movsd  D72(%rip),%xmm0
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  mov    %eax,%edx
  mov    $0x1,%eax
  sub    %edx,%eax
  imul   %ebx,%eax
  mov    %eax,%edi
  call   <sqrt@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  movq   %rax,%xmm0
  call   <nearbyint@plt>
  mov    %eax,-0x1c(%rbp)
  movsbl -0x21(%rbp),%edx
  mov    -0x40(%rbp),%ecx
  mov    -0x20(%rbp),%eax
  lea    (%rcx,%rax,1),%edi
  mov    -0x3c(%rbp),%ecx
  mov    -0x1c(%rbp),%eax
  lea    (%rcx,%rax,1),%esi
  mov    -0x38(%rbp),%rax
  mov    %edx,%ecx
  mov    %edi,%edx
  mov    %rax,%rdi
  call   <mvwaddch@plt>
  movsd  D2(%rip),%xmm0
  mov    D9(%rip),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  mov    %eax,%ebx
  mov    -0x20(%rbp),%eax
  mov    %eax,%edi
  call   <abs@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  movsd  D84(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movsd  D72(%rip),%xmm0
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  mov    %eax,%edx
  mov    $0x1,%eax
  sub    %edx,%eax
  imul   %ebx,%eax
  mov    %eax,%edi
  call   <sqrt@plt>
  movq   %xmm0,%rax
  movq   D23(%rip),%xmm0
  movq   %rax,%xmm2
  xorpd  %xmm0,%xmm2
  movapd %xmm2,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  movq   %rax,%xmm0
  call   <nearbyint@plt>
  mov    %eax,-0x1c(%rbp)
  movsbl -0x21(%rbp),%edx
  mov    -0x40(%rbp),%ecx
  mov    -0x20(%rbp),%eax
  lea    (%rcx,%rax,1),%edi
  mov    -0x3c(%rbp),%ecx
  mov    -0x1c(%rbp),%eax
  lea    (%rcx,%rax,1),%esi
  mov    -0x38(%rbp),%rax
  mov    %edx,%ecx
  mov    %edi,%edx
  mov    %rax,%rdi
  call   <mvwaddch@plt>
  addl   $0x1,-0x20(%rbp)
L13:
  cmpl   $0x7,-0x20(%rbp)
  jle    L16
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <move@plt>
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <wrefresh@plt>
  nop
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: read_data
arguments: data_label: D2
type_guessed: byte[8]
name: read_data
arguments: data_label: D9
type_guessed: byte[8]
name: read_data
arguments: data_label: D84
type_guessed: byte[8]
name: read_data
arguments: data_label: D72
type_guessed: f64
name: read_data
arguments: data_label: D23
type_guessed: byte[8]

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

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

tool: {"D84": [0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x40]}

tool: D72: 1.5

tool: {"D23": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80]}

assistant: ```c
void draw_O(WINDOW *board, int y_position, int x_position) {
  chtype ch = 'O';
  signed int delta_y, delta_x;
  double ddel_y;
  for (delta_x = 1 - (16 / 2); delta_x < (16 / 2); ++delta_x) {
    ddel_y = (sqrt(pow(((8 / 2) - 1), 2) * (1 - (pow(((double)abs(delta_x)) / ((16 / 2) - 1), 1.5)))));
    delta_y = nearbyint(ddel_y);
    mvwaddch(board, y_position + delta_y, x_position + delta_x, ch);
    ddel_y = -(sqrt(pow(((8 / 2) - 1), 2) * (1 - (pow(((double)abs(delta_x)) / ((16 / 2) - 1), 1.5)))));
    delta_y = nearbyint(ddel_y);
    mvwaddch(board, y_position + delta_y, x_position + delta_x, ch);
  }
  move(0, 0);
  wrefresh(board);
}
```