user: 这段汇编代码用C语言表示是什么样的：

```asm
<utf8_to_code>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x8(%rbp)
  mov    %rsi,-0x10(%rbp)
  cmpq   $0x0,-0x8(%rbp)
  jne    L495
  mov    D44(%rip),%rax
  mov    (%rax),%rdx
  mov    D137(%rip),%rax
  mov    %rdx,(%rax)
  mov    $0x0,%eax
  jmp    L429
L495:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L12
  mov    D137(%rip),%rax
  movq   $0x0,(%rax)
  mov    $0x0,%eax
  jmp    L429
L12:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  js     L532
  cmpq   $0x0,-0x10(%rbp)
  je     L306
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x10(%rbp),%rax
  mov    %edx,(%rax)
L306:
  mov    $0x1,%eax
  jmp    L429
L532:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xbf,%al
  ja     L277
  mov    D83(%rip),%rax
  mov    (%rax),%rdx
  mov    D137(%rip),%rax
  mov    %rdx,(%rax)
  mov    $0x0,%eax
  jmp    L429
L277:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xdf,%al
  ja     L49
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jns    L384
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  cmp    $0xbf,%al
  ja     L384
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  sub    $0xc0,%eax
  shl    $0x6,%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    $0xffffff80,%eax
  or     %edx,%eax
  mov    %eax,%eax
  jmp    L429
L384:
  mov    D83(%rip),%rax
  mov    (%rax),%rdx
  mov    D137(%rip),%rax
  mov    %rdx,(%rax)
  mov    $0x0,%eax
  jmp    L429
L49:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xef,%al
  ja     L115
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jns    L400
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  cmp    $0xbf,%al
  ja     L400
  mov    -0x8(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jns    L400
  mov    -0x8(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  cmp    $0xbf,%al
  ja     L400
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  sub    $0xe0,%eax
  shl    $0xc,%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    $0xffffff80,%eax
  shl    $0x6,%eax
  or     %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    $0xffffff80,%eax
  or     %edx,%eax
  mov    %eax,%eax
  jmp    L429
L400:
  mov    D83(%rip),%rax
  mov    (%rax),%rdx
  mov    D137(%rip),%rax
  mov    %rdx,(%rax)
  mov    $0x0,%eax
  jmp    L429
L115:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xf7,%al
  ja     L410
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jns    L471
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  cmp    $0xbf,%al
  ja     L471
  mov    -0x8(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jns    L471
  mov    -0x8(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  cmp    $0xbf,%al
  ja     L471
  mov    -0x8(%rbp),%rax
  add    $0x3,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jns    L471
  mov    -0x8(%rbp),%rax
  add    $0x3,%rax
  movzbl (%rax),%eax
  cmp    $0xbf,%al
  ja     L471
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  sub    $0xf0,%eax
  shl    $0x12,%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    $0xffffff80,%eax
  shl    $0xc,%eax
  or     %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    $0xffffff80,%eax
  shl    $0x6,%eax
  or     %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0x3,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    $0xffffff80,%eax
  or     %edx,%eax
  mov    %eax,%eax
  jmp    L429
L471:
  mov    D83(%rip),%rax
  mov    (%rax),%rdx
  mov    D137(%rip),%rax
  mov    %rdx,(%rax)
  mov    $0x0,%eax
  jmp    L429
L410:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xfb,%al
  ja     L358
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jns    L59
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  cmp    $0xbf,%al
  ja     L59
  mov    -0x8(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jns    L59
  mov    -0x8(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  cmp    $0xbf,%al
  ja     L59
  mov    -0x8(%rbp),%rax
  add    $0x3,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jns    L59
  mov    -0x8(%rbp),%rax
  add    $0x3,%rax
  movzbl (%rax),%eax
  cmp    $0xbf,%al
  ja     L59
  mov    -0x8(%rbp),%rax
  add    $0x4,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jns    L59
  mov    -0x8(%rbp),%rax
  add    $0x4,%rax
  movzbl (%rax),%eax
  cmp    $0xbf,%al
  ja     L59
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  sub    $0xf8,%eax
  shl    $0x18,%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    $0xffffff80,%eax
  shl    $0x12,%eax
  or     %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    $0xffffff80,%eax
  shl    $0xc,%eax
  or     %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0x3,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    $0xffffff80,%eax
  shl    $0x6,%eax
  or     %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0x4,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    $0xffffff80,%eax
  or     %edx,%eax
  mov    %eax,%eax
  jmp    L429
L59:
  mov    D83(%rip),%rax
  mov    (%rax),%rdx
  mov    D137(%rip),%rax
  mov    %rdx,(%rax)
  mov    $0x0,%eax
  jmp    L429
L358:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xfd,%al
  ja     L349
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jns    L150
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  cmp    $0xbf,%al
  ja     L150
  mov    -0x8(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jns    L150
  mov    -0x8(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  cmp    $0xbf,%al
  ja     L150
  mov    -0x8(%rbp),%rax
  add    $0x3,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jns    L150
  mov    -0x8(%rbp),%rax
  add    $0x3,%rax
  movzbl (%rax),%eax
  cmp    $0xbf,%al
  ja     L150
  mov    -0x8(%rbp),%rax
  add    $0x4,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jns    L150
  mov    -0x8(%rbp),%rax
  add    $0x4,%rax
  movzbl (%rax),%eax
  cmp    $0xbf,%al
  ja     L150
  mov    -0x8(%rbp),%rax
  add    $0x5,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jns    L150
  mov    -0x8(%rbp),%rax
  add    $0x5,%rax
  movzbl (%rax),%eax
  cmp    $0xbf,%al
  ja     L150
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  sub    $0xfc,%eax
  shl    $0x1e,%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    $0xffffff80,%eax
  shl    $0x18,%eax
  or     %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    $0xffffff80,%eax
  shl    $0x12,%eax
  or     %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0x3,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    $0xffffff80,%eax
  shl    $0xc,%eax
  or     %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0x4,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    $0xffffff80,%eax
  shl    $0x6,%eax
  or     %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0x5,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    $0xffffff80,%eax
  or     %edx,%eax
  mov    %eax,%eax
  jmp    L429
L150:
  mov    D83(%rip),%rax
  mov    (%rax),%rdx
  mov    D137(%rip),%rax
  mov    %rdx,(%rax)
  mov    $0x0,%eax
  jmp    L429
L349:
  mov    D83(%rip),%rax
  mov    (%rax),%rdx
  mov    D137(%rip),%rax
  mov    %rdx,(%rax)
  mov    $0x0,%eax
L429:
  pop    %rbp
  ret
```

assistant: ```c
size_t utf8_to_code(const unsigned char *const buffer, unsigned int *const codeptr) {
  if (!buffer) {
    errno = EINVAL;
    return 0;
  }
  if (*buffer == 0U) {
    errno = 0;
    return 0;
  }
  if (*buffer < 128U) {
    if (codeptr)
      *codeptr = buffer[0];
    return 1;
  }
  if (*buffer < 192U) {
    errno = EILSEQ;
    return 0;
  }
  if (*buffer < 224U) {
    if (buffer[1] >= 128U && buffer[1] < 192U)
      return ((buffer[0] - 192U) << 6U) | (buffer[1] - 128U);
    errno = EILSEQ;
    return 0;
  }
  if (*buffer < 240U) {
    if (buffer[1] >= 128U && buffer[1] < 192U && buffer[2] >= 128U && buffer[2] < 192U)
      return ((buffer[0] - 224U) << 12U) | ((buffer[1] - 128U) << 6U) | (buffer[2] - 128U);
    errno = EILSEQ;
    return 0;
  }
  if (*buffer < 248U) {
    if (buffer[1] >= 128U && buffer[1] < 192U && buffer[2] >= 128U && buffer[2] < 192U && buffer[3] >= 128U && buffer[3] < 192U)
      return ((buffer[0] - 240U) << 18U) | ((buffer[1] - 128U) << 12U) | ((buffer[2] - 128U) << 6U) | (buffer[3] - 128U);
    errno = EILSEQ;
    return 0;
  }
  if (*buffer < 252U) {
    if (buffer[1] >= 128U && buffer[1] < 192U && buffer[2] >= 128U && buffer[2] < 192U && buffer[3] >= 128U && buffer[3] < 192U && buffer[4] >= 128U && buffer[4] < 192U)
      return ((buffer[0] - 248U) << 24U) | ((buffer[1] - 128U) << 18U) | ((buffer[2] - 128U) << 12U) | ((buffer[3] - 128U) << 6U) | (buffer[4] - 128U);
    errno = EILSEQ;
    return 0;
  }
  if (*buffer < 254U) {
    if (buffer[1] >= 128U && buffer[1] < 192U && buffer[2] >= 128U && buffer[2] < 192U && buffer[3] >= 128U && buffer[3] < 192U && buffer[4] >= 128U && buffer[4] < 192U && buffer[5] >= 128U && buffer[5] < 192U)
      return ((buffer[0] - 252U) << 30U) | ((buffer[1] - 128U) << 24U) | ((buffer[2] - 128U) << 18U) | ((buffer[3] - 128U) << 12U) | ((buffer[4] - 128U) << 6U) | (buffer[5] - 128U);
    errno = EILSEQ;
    return 0;
  }
  errno = EILSEQ;
  return 0;
}
```