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

```asm
<star_bar_plot>:
  endbr64
  push   %r12
  mov    $0x7c2e,%edx
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  sub    $0x60,%rsp
  movdqa D18(%rip),%xmm2
  mov    %fs:0x28,%rax
  mov    %rax,0x58(%rsp)
  xor    %eax,%eax
  mulsd  D15(%rip),%xmm0
  mov    D44(%rip),%rax
  mov    %dx,0x4a(%rsp)
  mov    $0x1,%edx
  movups %xmm2,0x2(%rsp)
  movdqa D55(%rip),%xmm2
  lea    0x1(%rsp),%rbx
  mov    %rax,0x42(%rsp)
  movups %xmm2,0x12(%rsp)
  movdqa D24(%rip),%xmm2
  movb   $0x2e,0x1(%rsp)
  divsd  %xmm1,%xmm0
  movups %xmm2,0x22(%rsp)
  movdqa D14(%rip),%xmm2
  movl   $0x2e2e2e2e,0x4c(%rsp)
  movb   $0x7c,0x50(%rsp)
  movups %xmm2,0x32(%rsp)
  cvttsd2si %xmm0,%eax
  add    $0x1,%eax
  test   %eax,%eax
  cmovle %edx,%eax
  mov    $0x50,%edx
  cmp    %edx,%eax
  cmovg  %edx,%eax
  mov    $0x51,%edx
  sub    %eax,%edx
  cmp    $0x8,%edx
  jae    L46
  test   $0x4,%dl
  jne    L6
  test   %edx,%edx
  je     L51
  movb   $0x2a,0x1(%rsp)
  test   $0x2,%dl
  je     L51
  mov    $0x2a2a,%eax
  mov    %ax,-0x2(%rbx,%rdx,1)
  jmp    L51
  cs nopw 0x0(%rax,%rax,1)
L46:
  movabs $0x2a2a2a2a2a2a2a2a,%rax
  mov    %edx,%ecx
  lea    0x8(%rsp),%rdi
  mov    %rax,0x1(%rsp)
  mov    %rax,-0x8(%rbx,%rcx,1)
  mov    %rbx,%rcx
  sub    %rdi,%rcx
  add    %ecx,%edx
  shr    $0x3,%edx
  mov    %edx,%ecx
  rep stos %rax,%es:(%rdi)
L51:
  lea    0x51(%rsp),%r12
L45:
  movsbl (%rbx),%edi
  mov    %rbp,%rsi
  add    $0x1,%rbx
  call   <fputc@plt>
  cmp    %rbx,%r12
  jne    L45
  mov    0x58(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L59
  add    $0x60,%rsp
  mov    %rbp,%rsi
  mov    $0xa,%edi
  pop    %rbx
  pop    %rbp
  pop    %r12
  jmp    1070 <fputc@plt>
L6:
  movl   $0x2a2a2a2a,0x1(%rsp)
  movl   $0x2a2a2a2a,-0x4(%rbx,%rdx,1)
  jmp    L51
L59:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: read_data
arguments: tag: D18
type_guessed: byte[16]
name: read_data
arguments: tag: D15
type_guessed: byte[8]
name: read_data
arguments: tag: D44
type_guessed: byte[8]
name: read_data
arguments: tag: D55
type_guessed: byte[16]
name: read_data
arguments: tag: D24
type_guessed: byte[16]
name: read_data
arguments: tag: D14
type_guessed: byte[16]

tool: {"D18": [0x2e,0x2e,0x2e,0x7c,0x2e,0x2e,0x2e,0x2e,0x7c,0x2e,0x2e,0x2e,0x2e,0x7c,0x2e,0x2e]}

tool: {"D15": [0x00,0x00,0x00,0x00,0x00,0xc0,0x53,0x40]}

tool: {"D44": [0x2e,0x2e,0x2e,0x2e,0x7c,0x2e,0x2e,0x2e]}

tool: {"D55": [0x2e,0x2e,0x7c,0x2e,0x2e,0x2e,0x2e,0x7c,0x2e,0x2e,0x2e,0x2e,0x7c,0x2e,0x2e,0x2e]}

tool: {"D24": [0x2e,0x7c,0x2e,0x2e,0x2e,0x2e,0x7c,0x2e,0x2e,0x2e,0x2e,0x7c,0x2e,0x2e,0x2e,0x2e]}

tool: {"D14": [0x7c,0x2e,0x2e,0x2e,0x2e,0x7c,0x2e,0x2e,0x2e,0x2e,0x7c,0x2e,0x2e,0x2e,0x2e,0x7c]}

assistant: ```c
void star_bar_plot(FILE *pfile, double y, double yscale) {
  int jj, ypos;
  int columns = 80;
  char matrix[80 + 1];
  for (jj = 1; jj <= columns; jj++) {
    if (jj % 5 != 0)
      matrix[jj] = '.';
    else
      matrix[jj] = '|';
  }
  ypos = 1 + (int)((double)(columns - 1) * y / yscale);
  if (ypos > columns)
    ypos = columns;
  if (ypos < 1)
    ypos = 1;
  ypos = columns - ypos + 1;
  for (jj = 1; jj <= ypos; jj++)
    matrix[jj] = '*';
  for (jj = 1; jj <= columns; jj++)
    fprintf(pfile, "%c", matrix[jj]);
  fprintf(pfile, "\n");
  return;
}
```