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

```asm
<IsUTF8Text>:
  endbr64
  mov    %rdi,%r9
  mov    %esi,%r8d
  test   %esi,%esi
  jle    L90
  xor    %edi,%edi
L159:
  movslq %edi,%rdx
  mov    $0x1,%esi
  lea    (%r9,%rdx,1),%rcx
  movzbl (%rcx),%eax
  test   %al,%al
  js     L49
L313:
  add    %esi,%edi
  cmp    %edi,%r8d
  jg     L159
L90:
  mov    $0x1,%eax
  ret
L49:
  mov    %eax,%esi
  and    $0xffffffe0,%esi
  cmp    $0xc0,%sil
  je     L235
  mov    %eax,%esi
  and    $0xfffffff0,%esi
  cmp    $0xe0,%sil
  je     L256
  mov    %eax,%esi
  and    $0xfffffff8,%esi
  cmp    $0xf0,%sil
  je     L58
  mov    %eax,%esi
  and    $0xfffffffc,%esi
  cmp    $0xf8,%sil
  je     L191
  mov    %eax,%esi
  and    $0xfffffffe,%esi
  cmp    $0xfc,%sil
  jne    L23
  lea    0x6(%rdi),%esi
  cmp    %r8d,%esi
  jg     L23
  cmp    $0xfc,%al
  jne    L47
  testb  $0x3e,0x1(%r9,%rdx,1)
  je     L23
L47:
  mov    $0x6,%esi
  jmp    L259
  xchg   %ax,%ax
L235:
  lea    0x2(%rdi),%edx
  cmp    %r8d,%edx
  jg     L23
  test   $0x1e,%al
  je     L23
  mov    $0x2,%esi
L259:
  mov    $0x1,%edx
  jmp    L52
  nopl   0x0(%rax,%rax,1)
L83:
  add    $0x1,%rdx
  cmp    %edx,%esi
  jle    L313
L52:
  movzbl (%rcx,%rdx,1),%eax
  and    $0xffffffc0,%eax
  cmp    $0x80,%al
  je     L83
L23:
  xor    %eax,%eax
  ret
L256:
  lea    0x3(%rdi),%esi
  cmp    %r8d,%esi
  jg     L23
  cmp    $0xed,%al
  je     L126
  test   $0xf,%al
  jne    L175
  testb  $0x20,0x1(%r9,%rdx,1)
  je     L23
L175:
  mov    $0x3,%esi
  jmp    L259
L191:
  lea    0x5(%rdi),%esi
  cmp    %r8d,%esi
  jg     L23
  test   $0x3,%al
  jne    L201
  testb  $0x38,0x1(%r9,%rdx,1)
  je     L23
L201:
  mov    $0x5,%esi
  jmp    L259
L58:
  lea    0x4(%rdi),%esi
  cmp    %r8d,%esi
  jg     L23
  test   $0x7,%al
  jne    L314
  testb  $0x30,0x1(%r9,%rdx,1)
  je     L23
L314:
  mov    $0x4,%esi
  jmp    L259
L126:
  movzbl 0x1(%r9,%rdx,1),%eax
  and    $0xffffffa0,%eax
  cmp    $0xa0,%al
  jne    L175
  jmp    L23
```

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