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

```asm
<IsUTF8Text>:
  endbr64
  test   %esi,%esi
  jle    L221
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%r10
  mov    %esi,%r8d
  mov    $0x0,%edi
  mov    $0x1,%r9d
  mov    $0x6,%ebp
  mov    $0x5,%r13d
  mov    $0x4,%r12d
  mov    $0x3,%ebx
  mov    $0x2,%r11d
L73:
  movslq %edi,%rdx
  lea    (%r10,%rdx,1),%rcx
  movzbl (%rcx),%eax
  mov    %r9d,%esi
  test   %al,%al
  js     L287
L57:
  add    %esi,%edi
  cmp    %edi,%r8d
  jg     L73
  mov    $0x1,%eax
  jmp    L54
L287:
  mov    %eax,%esi
  and    $0xffffffe0,%esi
  cmp    $0xc0,%sil
  je     L366
  mov    %eax,%esi
  and    $0xfffffff0,%esi
  cmp    $0xe0,%sil
  je     L458
  mov    %eax,%esi
  and    $0xfffffff8,%esi
  cmp    $0xf0,%sil
  je     L41
  mov    %eax,%esi
  and    $0xfffffffc,%esi
  cmp    $0xf8,%sil
  je     L356
  mov    %eax,%esi
  and    $0xfffffffe,%esi
  cmp    $0xfc,%sil
  jne    L162
  lea    0x6(%rdi),%esi
  cmp    %r8d,%esi
  jg     L159
  test   $0x1,%al
  jne    L13
  testb  $0x3e,0x1(%r10,%rdx,1)
  je     L211
  mov    %ebp,%esi
  jmp    L229
L366:
  lea    0x2(%rdi),%edx
  cmp    %r8d,%edx
  jg     L375
  test   $0x1e,%al
  je     L111
  mov    %r11d,%esi
L229:
  mov    $0x1,%edx
L235:
  movzbl (%rcx,%rdx,1),%eax
  and    $0xffffffc0,%eax
  cmp    $0x80,%al
  jne    L276
  add    $0x1,%rdx
  cmp    %edx,%esi
  jg     L235
  jmp    L57
L458:
  lea    0x3(%rdi),%esi
  cmp    %r8d,%esi
  jg     L378
  cmp    $0xed,%al
  je     L325
  test   $0xf,%al
  jne    L258
  testb  $0x20,0x1(%r10,%rdx,1)
  je     L129
  mov    %ebx,%esi
  jmp    L229
L325:
  movzbl 0x1(%r10,%rdx,1),%eax
  and    $0xffffffa0,%eax
  cmp    $0xa0,%al
  je     L348
  mov    %ebx,%esi
  jmp    L229
L41:
  lea    0x4(%rdi),%esi
  cmp    %r8d,%esi
  jg     L156
  test   $0x7,%al
  jne    L88
  testb  $0x30,0x1(%r10,%rdx,1)
  je     L365
  mov    %r12d,%esi
  jmp    L229
L356:
  lea    0x5(%rdi),%esi
  cmp    %r8d,%esi
  jg     L384
  test   $0x3,%al
  jne    L139
  testb  $0x38,0x1(%r10,%rdx,1)
  je     L49
  mov    %r13d,%esi
  jmp    L229
L221:
  mov    $0x1,%eax
  ret
L375:
  mov    $0x0,%eax
  jmp    L54
L111:
  mov    $0x0,%eax
  jmp    L54
L378:
  mov    $0x0,%eax
  jmp    L54
L348:
  mov    $0x0,%eax
  jmp    L54
L129:
  mov    $0x0,%eax
  jmp    L54
L156:
  mov    $0x0,%eax
  jmp    L54
L365:
  mov    $0x0,%eax
  jmp    L54
L384:
  mov    $0x0,%eax
  jmp    L54
L49:
  mov    $0x0,%eax
  jmp    L54
L162:
  mov    $0x0,%eax
  jmp    L54
L159:
  mov    $0x0,%eax
  jmp    L54
L211:
  mov    $0x0,%eax
  jmp    L54
L276:
  mov    $0x0,%eax
L54:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L258:
  mov    %ebx,%esi
  jmp    L229
L88:
  mov    %r12d,%esi
  jmp    L229
L139:
  mov    %r13d,%esi
  jmp    L229
L13:
  mov    %ebp,%esi
  jmp    L229
```

assistant: ```c
int IsUTF8Text(const unsigned char *utf8, int len) {
  int i;
  int j;
  int clen;
  for (i = 0; i < len; i += clen) {
    if ((0 == ((utf8[i]) & 0x80))) {
      clen = 1;
    } else if ((0xC0 == ((utf8[i]) & 0xE0))) {
      clen = 2;
      if ((i + clen) > len)
        return 0;
      if (0 == (utf8[i] & 0x1E))
        return 0;
    } else if ((0xE0 == ((utf8[i]) & 0xF0))) {
      clen = 3;
      if ((i + clen) > len)
        return 0;
      if ((0xED == utf8[i]) && (0xA0 == (utf8[i + 1] & 0xA0)))
        return 0;
      if ((0 == (utf8[i] & 0x0F)) && (0 == (utf8[i + 1] & 0x20)))
        return 0;
    } else if ((0xF0 == ((utf8[i]) & 0xF8))) {
      clen = 4;
      if ((i + clen) > len)
        return 0;
      if ((0 == (utf8[i] & 0x07)) && (0 == (utf8[i + 1] & 0x30)))
        return 0;
    } else if ((0xF8 == ((utf8[i]) & 0xFC))) {
      clen = 5;
      if ((i + clen) > len)
        return 0;
      if ((0 == (utf8[i] & 0x03)) && (0 == (utf8[i + 1] & 0x38)))
        return 0;
    } else if ((0xFC == ((utf8[i]) & 0xFE))) {
      clen = 6;
      if ((i + clen) > len)
        return 0;
      if ((0 == (utf8[i] & 0x01)) && (0 == (utf8[i + 1] & 0x3E)))
        return 0;
    } else {
      return 0;
    }
    for (j = 1; j < clen; j++) {
      if (!(0x80 == ((utf8[i + j]) & 0xC0)))
        return 0;
    }
  }
  return 1;
}
```