user: 下面的汇编指令对应的C源代码是什么：

```asm
<write_line>:
  endbr64
  push   %r14
  push   %r13
  mov    %edx,%r13d
  push   %r12
  mov    %ecx,%r12d
  push   %rbp
  mov    %rdi,%rbp
  movsbl %sil,%edi
  push   %rbx
  call   <hex2ui@plt>
  mov    %eax,%ebx
  test   $0x1,%al
  je     L165
  movsd  D54(%rip),%xmm1
  movsd  D192(%rip),%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
L174:
  test   $0x2,%bl
  je     L215
  movsd  D50(%rip),%xmm2
  movsd  D54(%rip),%xmm1
  mov    %rbp,%rdi
  movapd %xmm2,%xmm0
  movq   %xmm2,%r14
  call   <write_wave@plt>
L228:
  test   $0x4,%bl
  je     L195
  movsd  D54(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
L194:
  and    $0x8,%ebx
  je     L139
  movsd  D54(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
L15:
  movsbl %r13b,%edi
  call   <hex2ui@plt>
  mov    %eax,%ebx
  test   $0x1,%al
  je     L113
  movsd  D54(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
L137:
  test   $0x2,%bl
  je     L225
  movsd  D54(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
L119:
  test   $0x4,%bl
  je     L147
  movsd  D54(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
L149:
  and    $0x8,%ebx
  je     L71
  movsd  D54(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
L216:
  movsbl %r12b,%edi
  call   <hex2ui@plt>
  mov    %eax,%ebx
  test   $0x1,%al
  je     L212
  movsd  D54(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
L21:
  test   $0x2,%bl
  je     L112
  movsd  D54(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
L193:
  test   $0x4,%bl
  je     L61
  movsd  D54(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
L34:
  and    $0x8,%ebx
  movsd  D54(%rip),%xmm1
  jne    L191
  movsd  D5(%rip),%xmm1
L191:
  pop    %rbx
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  jmp    1070 <write_wave@plt>
  xchg   %ax,%ax
L61:
  movsd  D5(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
  jmp    L34
  nopw   0x0(%rax,%rax,1)
L112:
  movsd  D5(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
  jmp    L193
  nopw   0x0(%rax,%rax,1)
L212:
  movsd  D5(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
  jmp    L21
  nopw   0x0(%rax,%rax,1)
L71:
  movsd  D5(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
  jmp    L216
  nopw   0x0(%rax,%rax,1)
L147:
  movsd  D5(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
  jmp    L149
  nopw   0x0(%rax,%rax,1)
L225:
  movsd  D5(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
  jmp    L119
  nopw   0x0(%rax,%rax,1)
L113:
  movsd  D5(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
  jmp    L137
  nopw   0x0(%rax,%rax,1)
L139:
  movsd  D5(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
  jmp    L15
  nopw   0x0(%rax,%rax,1)
L195:
  movsd  D5(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
  jmp    L194
  nopw   0x0(%rax,%rax,1)
L215:
  movsd  D50(%rip),%xmm3
  movsd  D5(%rip),%xmm1
  mov    %rbp,%rdi
  movapd %xmm3,%xmm0
  movq   %xmm3,%r14
  call   <write_wave@plt>
  jmp    L228
  cs nopw 0x0(%rax,%rax,1)
L165:
  movsd  D5(%rip),%xmm1
  movsd  D192(%rip),%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
  jmp    L174
```

tool_calls: name: parse_data
arguments: tag: D54
type_guessed: f64
name: parse_data
arguments: tag: D192
type_guessed: f64
name: parse_data
arguments: tag: D50
type_guessed: f64
name: parse_data
arguments: tag: D5
type_guessed: f64

tool: D54: 1136

tool: D192: 0.047

tool: D50: 0.063

tool: D5: 568

assistant: ```c
void write_line(FILE *wavfile, char c1, char c2, char c3) {
  unsigned char ui;
  ui = hex2ui(c1);
  if (ui & 0x1)
    write_wave(wavfile, 0.047, 1136.0);
  else
    write_wave(wavfile, 0.047, 568.0);
  if (ui & 0x2)
    write_wave(wavfile, 0.063, 1136.0);
  else
    write_wave(wavfile, 0.063, 568.0);
  if (ui & 0x4)
    write_wave(wavfile, 0.063, 1136.0);
  else
    write_wave(wavfile, 0.063, 568.0);
  if (ui & 0x8)
    write_wave(wavfile, 0.063, 1136.0);
  else
    write_wave(wavfile, 0.063, 568.0);
  ui = hex2ui(c2);
  if (ui & 0x1)
    write_wave(wavfile, 0.063, 1136.0);
  else
    write_wave(wavfile, 0.063, 568.0);
  if (ui & 0x2)
    write_wave(wavfile, 0.063, 1136.0);
  else
    write_wave(wavfile, 0.063, 568.0);
  if (ui & 0x4)
    write_wave(wavfile, 0.063, 1136.0);
  else
    write_wave(wavfile, 0.063, 568.0);
  if (ui & 0x8)
    write_wave(wavfile, 0.063, 1136.0);
  else
    write_wave(wavfile, 0.063, 568.0);
  ui = hex2ui(c3);
  if (ui & 0x1)
    write_wave(wavfile, 0.063, 1136.0);
  else
    write_wave(wavfile, 0.063, 568.0);
  if (ui & 0x2)
    write_wave(wavfile, 0.063, 1136.0);
  else
    write_wave(wavfile, 0.063, 568.0);
  if (ui & 0x4)
    write_wave(wavfile, 0.063, 1136.0);
  else
    write_wave(wavfile, 0.063, 568.0);
  if (ui & 0x8)
    write_wave(wavfile, 0.063, 1136.0);
  else
    write_wave(wavfile, 0.063, 568.0);
}
```