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

```asm
<utf_replace_html>:
  endbr64
  push   %r15
  push   %r14
  lea    0x3(%rdi),%r14
  push   %r13
  lea    0x7(%rdi),%r13
  push   %r12
  push   %rbp
  lea    D95(%rip),%rbp
  push   %rbx
  lea    0x2(%rdi),%rbx
  sub    $0x8,%rsp
  movzbl (%rdi),%edx
  test   %dl,%dl
  je     L160
  nopl   0x0(%rax)
L272:
  movzbl -0x1(%rbx),%eax
  lea    -0x2(%rbx),%r12
  lea    -0x1(%rbx),%r15
  cmp    $0xe2,%dl
  je     L268
  cmp    $0xce,%dl
  je     L284
  cmp    $0xcf,%dl
  je     L226
  cmp    $0xc2,%dl
  jne    L371
  cmp    $0xb0,%al
  je     L26
  nopl   0x0(%rax)
L371:
  add    $0x1,%r13
  add    $0x1,%r14
  add    $0x1,%rbx
  test   %al,%al
  je     L160
  mov    %eax,%edx
  jmp    L272
  nopl   0x0(%rax)
L160:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L268:
  cmp    $0x80,%al
  je     L89
  cmp    $0x88,%al
  je     L210
  cmp    $0x89,%al
  jne    L371
  cmpb   $0xa4,(%rbx)
  je     L84
L39:
  add    $0x1,%r13
  add    $0x1,%r14
  add    $0x1,%rbx
  mov    %eax,%edx
  jmp    L272
L284:
  cmp    $0x93,%al
  je     L283
  cmp    $0xb2,%al
  je     L187
  cmp    $0xbb,%al
  je     L124
  cmp    $0xbc,%al
  jne    L371
  mov    $0x2,%esi
  mov    %r12,%rdi
  call   <mvsize@plt>
  lea    0x2(%rbx),%rdi
  mov    %rbx,%rsi
  mov    %eax,%edx
  call   <memmove@plt>
  lea    D21(%rip),%rsi
  mov    %r12,%rdi
  call   <write_text@plt>
  movzbl -0x1(%rbx),%eax
  jmp    L371
  nop
L226:
  cmp    $0x80,%al
  je     L193
  cmp    $0x81,%al
  je     L209
  cmp    $0x83,%al
  je     L256
  cmp    $0x89,%al
  jne    L371
  mov    $0x2,%esi
  mov    %r12,%rdi
  call   <mvsize@plt>
  mov    %rbx,%rsi
  mov    %r13,%rdi
  mov    %eax,%edx
  call   <memmove@plt>
  lea    D51(%rip),%rsi
  mov    %r12,%rdi
  call   <write_text@plt>
  movzbl -0x1(%rbx),%eax
  jmp    L371
  nopw   0x0(%rax,%rax,1)
L89:
  movzbl (%rbx),%edx
  cmp    $0x93,%dl
  je     L105
  cmp    $0x94,%dl
  je     L155
  cmp    $0xa6,%dl
  jne    L39
  lea    D64(%rip),%rsi
  mov    %r12,%rdi
  call   <write_text@plt>
  movzbl -0x1(%rbx),%eax
  jmp    L371
  xchg   %ax,%ax
L210:
  cmpb   $0x92,(%rbx)
  jne    L39
  lea    D12(%rip),%rsi
  mov    %r12,%rdi
  call   <write_text@plt>
  mov    $0x3,%esi
  mov    %r12,%rdi
  call   <mvsize@plt>
  mov    %r14,%rsi
  mov    %r15,%rdi
  mov    %eax,%edx
  call   <memmove@plt>
  movzbl -0x1(%rbx),%eax
  jmp    L371
  nopl   0x0(%rax,%rax,1)
L283:
  mov    $0x2,%esi
  mov    %r12,%rdi
  call   <mvsize@plt>
  mov    %rbx,%rsi
  mov    %r13,%rdi
  mov    %eax,%edx
  call   <memmove@plt>
  lea    D69(%rip),%rsi
  mov    %r12,%rdi
  call   <write_text@plt>
  movzbl -0x1(%rbx),%eax
  jmp    L371
  nopw   0x0(%rax,%rax,1)
L187:
  mov    $0x2,%esi
  mov    %r12,%rdi
  call   <mvsize@plt>
  lea    0x4(%rbx),%rdi
  mov    %rbx,%rsi
  mov    %eax,%edx
  call   <memmove@plt>
  lea    D7(%rip),%rsi
  mov    %r12,%rdi
  call   <write_text@plt>
  movzbl -0x1(%rbx),%eax
  jmp    L371
  nopl   0x0(%rax,%rax,1)
L124:
  mov    $0x2,%esi
  mov    %r12,%rdi
  call   <mvsize@plt>
  lea    0x6(%rbx),%rdi
  mov    %rbx,%rsi
  mov    %eax,%edx
  call   <memmove@plt>
  lea    D56(%rip),%rsi
  mov    %r12,%rdi
  call   <write_text@plt>
  movzbl -0x1(%rbx),%eax
  jmp    L371
  nopl   0x0(%rax,%rax,1)
L193:
  mov    $0x2,%esi
  mov    %r12,%rdi
  call   <mvsize@plt>
  lea    0x2(%rbx),%rdi
  mov    %rbx,%rsi
  mov    %eax,%edx
  call   <memmove@plt>
  lea    D54(%rip),%rsi
  mov    %r12,%rdi
  call   <write_text@plt>
  movzbl -0x1(%rbx),%eax
  jmp    L371
  nopl   0x0(%rax,%rax,1)
L209:
  mov    $0x2,%esi
  mov    %r12,%rdi
  call   <mvsize@plt>
  lea    0x3(%rbx),%rdi
  mov    %rbx,%rsi
  mov    %eax,%edx
  call   <memmove@plt>
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <write_text@plt>
  movzbl -0x1(%rbx),%eax
  jmp    L371
  nop
L256:
  mov    $0x2,%esi
  mov    %r12,%rdi
  call   <mvsize@plt>
  mov    %rbx,%rsi
  mov    %r13,%rdi
  mov    %eax,%edx
  call   <memmove@plt>
  lea    D76(%rip),%rsi
  mov    %r12,%rdi
  call   <write_text@plt>
  movzbl -0x1(%rbx),%eax
  jmp    L371
  nopw   0x0(%rax,%rax,1)
L26:
  mov    $0x2,%esi
  mov    %r12,%rdi
  call   <mvsize@plt>
  lea    0x3(%rbx),%rdi
  mov    %rbx,%rsi
  mov    %eax,%edx
  call   <memmove@plt>
  lea    D20(%rip),%rsi
  mov    %r12,%rdi
  call   <write_text@plt>
  movzbl -0x1(%rbx),%eax
  jmp    L371
  nopl   0x0(%rax,%rax,1)
L105:
  mov    $0x3,%esi
  mov    %r12,%rdi
  call   <mvsize@plt>
  mov    %r14,%rsi
  mov    %r13,%rdi
  mov    %eax,%edx
  call   <memmove@plt>
  lea    D24(%rip),%rsi
  mov    %r12,%rdi
  call   <write_text@plt>
  movzbl -0x1(%rbx),%eax
  jmp    L371
  nopw   0x0(%rax,%rax,1)
L84:
  lea    D80(%rip),%rsi
  mov    %r12,%rdi
  call   <write_text@plt>
  mov    $0x3,%esi
  mov    %r12,%rdi
  call   <mvsize@plt>
  mov    %r14,%rsi
  mov    %rbx,%rdi
  mov    %eax,%edx
  call   <memmove@plt>
  movzbl -0x1(%rbx),%eax
  jmp    L371
  nopw   0x0(%rax,%rax,1)
L155:
  mov    $0x3,%esi
  mov    %r12,%rdi
  call   <mvsize@plt>
  mov    %r14,%rsi
  mov    %r13,%rdi
  mov    %eax,%edx
  call   <memmove@plt>
  lea    D2(%rip),%rsi
  mov    %r12,%rdi
  call   <write_text@plt>
  movzbl -0x1(%rbx),%eax
  jmp    L371
```

tool_calls: name: retrieve_data
arguments: data_label: D95
datatype: string
name: retrieve_data
arguments: data_label: D21
datatype: string
name: retrieve_data
arguments: data_label: D51
datatype: string
name: retrieve_data
arguments: data_label: D64
datatype: string
name: retrieve_data
arguments: data_label: D12
datatype: string
name: retrieve_data
arguments: data_label: D69
datatype: string
name: retrieve_data
arguments: data_label: D7
datatype: string
name: retrieve_data
arguments: data_label: D56
datatype: string
name: retrieve_data
arguments: data_label: D54
datatype: string
name: retrieve_data
arguments: data_label: D76
datatype: string
name: retrieve_data
arguments: data_label: D20
datatype: string
name: retrieve_data
arguments: data_label: D24
datatype: string
name: retrieve_data
arguments: data_label: D80
datatype: string
name: retrieve_data
arguments: data_label: D2
datatype: string

tool: D95: &rho;

tool: D21: &mu;

tool: D51: &omega;

tool: D64: ...

tool: D12: -

tool: D69: &Gamma;

tool: D7: &beta;

tool: D56: &lambda;

tool: D54: &pi;

tool: D76: &sigma;

tool: D20: &deg;

tool: D24: &#8211;

tool: D80: <=

tool: D2: &#8212;

assistant: ```c
void utf_replace_html(unsigned char *s) {
  while (*s) {
    if (s[0] == 0xe2 && s[1] == 0x80) {
      if (s[2] == 0x93) {
        memmove(s + 7, s + 3, mvsize(s, 3));
        write_text(s, "&#8211;");
      } else if (s[2] == 0x94) {
        memmove(s + 7, s + 3, mvsize(s, 3));
        write_text(s, "&#8212;");
      } else if (s[2] == 0xa6) {
        write_text(s, "...");
      }
    } else if (s[0] == 0xe2 && s[1] == 0x88 && s[2] == 0x92) {
      write_text(s, "-");
      memmove(s + 1, s + 3, mvsize(s, 3));
    } else if (s[0] == 0xe2 && s[1] == 0x89 && s[2] == 0xa4) {
      write_text(s, "<=");
      memmove(s + 2, s + 3, mvsize(s, 3));
    } else if (s[0] == 0xce && s[1] == 0x93) {
      memmove(s + 7, s + 2, mvsize(s, 2));
      write_text(s, "&Gamma;");
    } else if (s[0] == 0xce && s[1] == 0xb2) {
      memmove(s + 6, s + 2, mvsize(s, 2));
      write_text(s, "&beta;");
    } else if (s[0] == 0xce && s[1] == 0xbb) {
      memmove(s + 8, s + 2, mvsize(s, 2));
      write_text(s, "&lambda;");
    } else if (s[0] == 0xce && s[1] == 0xbc) {
      memmove(s + 4, s + 2, mvsize(s, 2));
      write_text(s, "&mu;");
    } else if (s[0] == 0xcf && s[1] == 0x80) {
      memmove(s + 4, s + 2, mvsize(s, 2));
      write_text(s, "&pi;");
    } else if (s[0] == 0xcf && s[1] == 0x81) {
      memmove(s + 5, s + 2, mvsize(s, 2));
      write_text(s, "&rho;");
    } else if (s[0] == 0xcf && s[1] == 0x83) {
      memmove(s + 7, s + 2, mvsize(s, 2));
      write_text(s, "&sigma;");
    } else if (s[0] == 0xcf && s[1] == 0x89) {
      memmove(s + 7, s + 2, mvsize(s, 2));
      write_text(s, "&omega;");
    } else if (s[0] == 0xc2 && s[1] == 0xb0) {
      memmove(s + 5, s + 2, mvsize(s, 2));
      write_text(s, "&deg;");
    }
    s++;
  }
}
```