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

```asm
<utf_replace_html>:
  endbr64
  movzbl (%rdi),%eax
  test   %al,%al
  je     L154
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  lea    0x7(%rdi),%rbp
  lea    0x3(%rdi),%r12
  lea    0x2(%rdi),%rbx
  lea    D68(%rip),%r15
  jmp    L314
L9:
  movzbl -0x1(%rbx),%eax
  cmp    $0x80,%al
  je     L208
  cmp    $0x88,%al
  je     L273
  cmp    $0x89,%al
  jne    L286
  cmpb   $0xa4,(%rbx)
  je     L31
L242:
  movzbl -0x1(%rbx),%eax
  add    $0x1,%rbp
  add    $0x1,%r12
  add    $0x1,%rbx
  jmp    L314
L208:
  movzbl (%rbx),%eax
  cmp    $0x93,%al
  je     L64
  cmp    $0x94,%al
  je     L90
  cmp    $0xa6,%al
  jne    L242
  lea    D3(%rip),%rsi
  mov    %r13,%rdi
  call   <write_text@plt>
  jmp    L286
L64:
  mov    $0x3,%esi
  mov    %r13,%rdi
  call   <mvsize@plt>
  mov    %eax,%edx
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <memmove@plt>
  lea    D50(%rip),%rsi
  mov    %r13,%rdi
  call   <write_text@plt>
  jmp    L286
L90:
  mov    $0x3,%esi
  mov    %r13,%rdi
  call   <mvsize@plt>
  mov    %eax,%edx
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <memmove@plt>
  lea    D29(%rip),%rsi
  mov    %r13,%rdi
  call   <write_text@plt>
  jmp    L286
L273:
  cmpb   $0x92,(%rbx)
  jne    L286
  lea    D61(%rip),%rsi
  mov    %r13,%rdi
  call   <write_text@plt>
  mov    $0x3,%esi
  mov    %r13,%rdi
  call   <mvsize@plt>
  mov    %eax,%edx
  lea    -0x1(%rbx),%rdi
  mov    %r12,%rsi
  call   <memmove@plt>
  jmp    L286
L31:
  lea    D90(%rip),%rsi
  mov    %r13,%rdi
  call   <write_text@plt>
  mov    $0x3,%esi
  mov    %r13,%rdi
  call   <mvsize@plt>
  mov    %eax,%edx
  mov    %r12,%rsi
  mov    %rbx,%rdi
  call   <memmove@plt>
  jmp    L286
L340:
  movzbl -0x1(%rbx),%eax
  cmp    $0x93,%al
  je     L34
  cmp    $0xb2,%al
  je     L288
  cmp    $0xbb,%al
  je     L132
  cmp    $0xbc,%al
  je     L352
L286:
  movzbl -0x1(%rbx),%eax
  add    $0x1,%rbp
  add    $0x1,%r12
  add    $0x1,%rbx
  test   %al,%al
  je     L74
L314:
  lea    -0x2(%rbx),%r13
  cmp    $0xe2,%al
  je     L9
  cmp    $0xce,%al
  je     L340
  cmp    $0xcf,%al
  je     L277
  cmp    $0xc2,%al
  jne    L286
  cmpb   $0xb0,-0x1(%rbx)
  jne    L286
  mov    $0x2,%esi
  mov    %r13,%rdi
  call   <mvsize@plt>
  mov    %eax,%edx
  lea    0x3(%rbx),%rdi
  mov    %rbx,%rsi
  call   <memmove@plt>
  lea    D109(%rip),%rsi
  mov    %r13,%rdi
  call   <write_text@plt>
  jmp    L286
L34:
  mov    $0x2,%esi
  mov    %r13,%rdi
  call   <mvsize@plt>
  mov    %eax,%edx
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  call   <memmove@plt>
  lea    D53(%rip),%rsi
  mov    %r13,%rdi
  call   <write_text@plt>
  jmp    L286
L288:
  mov    $0x2,%esi
  mov    %r13,%rdi
  call   <mvsize@plt>
  mov    %eax,%edx
  lea    0x4(%rbx),%rdi
  mov    %rbx,%rsi
  call   <memmove@plt>
  lea    D99(%rip),%rsi
  mov    %r13,%rdi
  call   <write_text@plt>
  jmp    L286
L132:
  mov    $0x2,%esi
  mov    %r13,%rdi
  call   <mvsize@plt>
  mov    %eax,%edx
  lea    0x6(%rbx),%rdi
  mov    %rbx,%rsi
  call   <memmove@plt>
  lea    D69(%rip),%rsi
  mov    %r13,%rdi
  call   <write_text@plt>
  jmp    L286
L352:
  mov    $0x2,%esi
  mov    %r13,%rdi
  call   <mvsize@plt>
  mov    %eax,%edx
  lea    0x2(%rbx),%rdi
  mov    %rbx,%rsi
  call   <memmove@plt>
  lea    D81(%rip),%rsi
  mov    %r13,%rdi
  call   <write_text@plt>
  jmp    L286
L277:
  movzbl -0x1(%rbx),%eax
  cmp    $0x80,%al
  je     L55
  cmp    $0x81,%al
  je     L309
  cmp    $0x83,%al
  je     L321
  cmp    $0x89,%al
  jne    L286
  mov    $0x2,%esi
  mov    %r13,%rdi
  call   <mvsize@plt>
  mov    %eax,%edx
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  call   <memmove@plt>
  lea    D4(%rip),%rsi
  mov    %r13,%rdi
  call   <write_text@plt>
  jmp    L286
L55:
  mov    $0x2,%esi
  mov    %r13,%rdi
  call   <mvsize@plt>
  mov    %eax,%edx
  lea    0x2(%rbx),%rdi
  mov    %rbx,%rsi
  call   <memmove@plt>
  lea    D123(%rip),%rsi
  mov    %r13,%rdi
  call   <write_text@plt>
  jmp    L286
L309:
  mov    $0x2,%esi
  mov    %r13,%rdi
  call   <mvsize@plt>
  mov    %eax,%edx
  lea    0x3(%rbx),%rdi
  mov    %rbx,%rsi
  call   <memmove@plt>
  mov    %r15,%rsi
  mov    %r13,%rdi
  call   <write_text@plt>
  jmp    L286
L321:
  mov    $0x2,%esi
  mov    %r13,%rdi
  call   <mvsize@plt>
  mov    %eax,%edx
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  call   <memmove@plt>
  lea    D46(%rip),%rsi
  mov    %r13,%rdi
  call   <write_text@plt>
  jmp    L286
L74:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L154:
  ret
```

tool_calls: name: unpack_data
arguments: label: D68
datatype: string
name: unpack_data
arguments: label: D3
datatype: string
name: unpack_data
arguments: label: D50
datatype: string
name: unpack_data
arguments: label: D29
datatype: string
name: unpack_data
arguments: label: D61
datatype: string
name: unpack_data
arguments: label: D90
datatype: string
name: unpack_data
arguments: label: D109
datatype: string
name: unpack_data
arguments: label: D53
datatype: string
name: unpack_data
arguments: label: D99
datatype: string
name: unpack_data
arguments: label: D69
datatype: string
name: unpack_data
arguments: label: D81
datatype: string
name: unpack_data
arguments: label: D4
datatype: string
name: unpack_data
arguments: label: D123
datatype: string
name: unpack_data
arguments: label: D46
datatype: string

tool: D68: &rho;

tool: D3: ...

tool: D50: &#8211;

tool: D29: &#8212;

tool: D61: -

tool: D90: <=

tool: D109: &deg;

tool: D53: &Gamma;

tool: D99: &beta;

tool: D69: &lambda;

tool: D81: &mu;

tool: D4: &omega;

tool: D123: &pi;

tool: D46: &sigma;

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++;
  }
}
```