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

```asm
<mywcscspn>:
  endbr64
  mov    (%rdi),%eax
  test   %eax,%eax
  je     L205
  mov    %edx,%r11d
  shr    %edx
  push   %rbx
  mov    %rsi,%r10
  and    $0x1,%r11d
  mov    %rdi,%r9
  xor    %ecx,%ecx
  xor    %esi,%esi
  xor    %r8d,%r8d
  and    $0x1,%edx
  mov    %r11d,%ebx
  nopl   0x0(%rax,%rax,1)
L448:
  cmp    $0x3,%esi
  ja     L19
  cmp    $0x1,%esi
  ja     L469
  jne    L181
L92:
  add    $0x1,%ecx
  movslq %ecx,%r8
  test   %r11d,%r11d
  jne    L32
  mov    %eax,%esi
L212:
  mov    (%r9,%r8,4),%eax
  mov    %r8d,%ecx
  cmp    $0x5d,%esi
  je     L148
  lea    0x1(%r8),%rcx
  test   %eax,%eax
  je     L99
  mov    %rcx,%r8
  mov    %eax,%esi
  jmp    L212
L434:
  lea    0x1(%r8),%rax
  test   %esi,%esi
  je     L99
  mov    %rax,%r8
  mov    %esi,%eax
L32:
  mov    %r8d,%ecx
  cmp    $0x27,%eax
  je     L309
  cmp    $0x22,%eax
  je     L98
  mov    (%r9,%r8,4),%esi
  cmp    $0x5d,%eax
  jne    L434
  mov    %esi,%eax
L148:
  test   %eax,%eax
  je     L99
  nopl   0x0(%rax)
L181:
  lea    0x1(%rcx),%edi
  movslq %edi,%rdi
L473:
  mov    %edi,%esi
  lea    -0x1(%rdi),%ecx
  cmp    $0x5b,%eax
  jne    L516
  test   %dl,%dl
  jne    L293
L516:
  cmp    $0x27,%eax
  jne    L5
  test   %bl,%bl
  jne    L251
L5:
  cmp    $0x22,%eax
  jne    L279
  test   %bl,%bl
  je     L279
  movslq %edi,%r8
  mov    %edi,%ecx
  mov    (%r9,%r8,4),%eax
  lea    0x0(,%r8,4),%rdi
  test   %eax,%eax
  je     L99
  cmp    $0x22,%eax
  je     L53
  mov    0x4(%r9,%rdi,1),%eax
  lea    0x1(%rsi),%ecx
  movslq %ecx,%r8
  test   %eax,%eax
  je     L99
  mov    $0x4,%esi
  nopl   0x0(%rax,%rax,1)
L19:
  cmp    $0x22,%eax
  je     L292
L502:
  add    $0x1,%ecx
  movslq %ecx,%r8
  mov    (%r9,%r8,4),%eax
  test   %eax,%eax
  jne    L448
L99:
  mov    %r8,%rax
  pop    %rbx
  ret
L309:
  movslq %r8d,%r8
  mov    (%r9,%r8,4),%eax
  lea    0x0(,%r8,4),%rsi
  test   %eax,%eax
  je     L99
  cmp    $0x27,%eax
  je     L528
  mov    0x4(%r9,%rsi,1),%eax
  add    $0x1,%ecx
  movslq %ecx,%r8
  test   %eax,%eax
  je     L99
  mov    $0x3,%esi
L469:
  cmp    $0x27,%eax
  jne    L502
  cmp    $0x2,%esi
  setne  %sil
  add    $0x1,%ecx
  movslq %ecx,%r8
  movzbl %sil,%esi
  mov    (%r9,%r8,4),%eax
  test   %eax,%eax
  jne    L448
  jmp    L99
  nopl   0x0(%rax)
L279:
  mov    (%r10),%esi
  test   %esi,%esi
  je     L340
  lea    0x4(%r10),%rdi
  jmp    L480
  nopl   0x0(%rax)
L373:
  mov    (%rdi),%esi
  add    $0x4,%rdi
  test   %esi,%esi
  je     L502
L480:
  cmp    %esi,%eax
  jne    L373
  mov    %r8,%rax
  pop    %rbx
  ret
  nopw   0x0(%rax,%rax,1)
L292:
  cmp    $0x4,%esi
  setne  %sil
  add    $0x1,%ecx
  movslq %ecx,%r8
  movzbl %sil,%esi
  mov    (%r9,%r8,4),%eax
  test   %eax,%eax
  jne    L448
  jmp    L99
  nopw   0x0(%rax,%rax,1)
L251:
  movslq %edi,%r8
  mov    %edi,%ecx
  mov    (%r9,%r8,4),%eax
  lea    0x0(,%r8,4),%rdi
  test   %eax,%eax
  je     L99
  cmp    $0x27,%eax
  jne    L338
L53:
  add    $0x1,%ecx
  xor    %esi,%esi
  movslq %ecx,%r8
  mov    (%r9,%r8,4),%eax
  test   %eax,%eax
  jne    L448
  jmp    L99
  nopl   0x0(%rax,%rax,1)
L98:
  movslq %r8d,%r8
  mov    (%r9,%r8,4),%eax
  lea    0x0(,%r8,4),%rsi
  test   %eax,%eax
  je     L99
  cmp    $0x22,%eax
  je     L528
  mov    0x4(%r9,%rsi,1),%eax
  add    $0x1,%ecx
  movslq %ecx,%r8
  test   %eax,%eax
  je     L99
  mov    $0x5,%esi
  cmp    $0x22,%eax
  jne    L502
  jmp    L292
  nopw   0x0(%rax,%rax,1)
L528:
  add    $0x1,%ecx
  mov    $0x1,%esi
  movslq %ecx,%r8
  mov    (%r9,%r8,4),%eax
  test   %eax,%eax
  jne    L448
  jmp    L99
  nopl   0x0(%rax)
L293:
  movslq %edi,%r8
  mov    %edi,%ecx
  mov    (%r9,%r8,4),%eax
  test   %eax,%eax
  jne    L92
  jmp    L99
  cs nopw 0x0(%rax,%rax,1)
L338:
  mov    0x4(%r9,%rdi,1),%eax
  lea    0x1(%rsi),%ecx
  movslq %ecx,%r8
  test   %eax,%eax
  je     L99
  mov    $0x2,%esi
  jmp    L469
L205:
  xor    %eax,%eax
  ret
L340:
  lea    0x1(%rdi),%rcx
  mov    %rdi,%r8
  mov    -0x4(%r9,%rcx,4),%eax
  test   %eax,%eax
  je     L99
  mov    %rcx,%rdi
  jmp    L473
```

assistant: ```c
size_t mywcscspn(const wchar_t *wcs, const wchar_t *reject, int flags) {
  enum {
    PLAIN,
    NAME_BLOCK,
    SINGLE_QUOTE,
    SINGLE_QUOTE_NAME,
    DOUBLE_QUOTE,
    DOUBLE_QUOTE_NAME,
  } state = PLAIN;
  int len = 0;
  int i;
  while (1) {
    if (!wcs[len])
      return len;
    switch (state) {
    case PLAIN:
      if ((flags & 0x02) && (wcs[len] == L'[')) {
        state = NAME_BLOCK;
        break;
      }
      if ((flags & 0x01) && (wcs[len] == L'\'')) {
        state = SINGLE_QUOTE;
        break;
      }
      if ((flags & 0x01) && (wcs[len] == L'\"')) {
        state = DOUBLE_QUOTE;
        break;
      }
      for (i = 0; reject[i]; i++)
        if (wcs[len] == reject[i])
          return len;
      break;
    case NAME_BLOCK:
      if ((flags & 0x01) && (wcs[len] == L'\'')) {
        state = SINGLE_QUOTE_NAME;
        break;
      }
      if ((flags & 0x01) && (wcs[len] == L'\"')) {
        state = DOUBLE_QUOTE_NAME;
        break;
      }
      if (wcs[len] == L']')
        state = PLAIN;
      break;
    case SINGLE_QUOTE:
    case SINGLE_QUOTE_NAME:
      if (wcs[len] == L'\'')
        state = state == SINGLE_QUOTE ? PLAIN : NAME_BLOCK;
      break;
    case DOUBLE_QUOTE:
    case DOUBLE_QUOTE_NAME:
      if (wcs[len] == L'\"')
        state = state == DOUBLE_QUOTE ? PLAIN : NAME_BLOCK;
      break;
    }
    len++;
  }
}
```