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

```asm
<matchglob>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r13
  push   %r12
  push   %rbx
  sub    $0x28,%rsp
  mov    %rdi,%r12
  mov    %rsi,%rbx
  movl   $0x1,-0x38(%rbp)
  movzbl (%rbx),%eax
  cmp    $0x5e,%al
  jne    L275
  movl   $0x0,-0x38(%rbp)
  add    $0x1,%rbx
L275:
  mov    %r12,%rax
  lea    0x1(%rax),%r12
  movzbl (%rax),%eax
  movsbl %al,%eax
  movzbl %al,%r13d
  mov    %rbx,%rax
  lea    0x1(%rax),%rbx
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,-0x28(%rbp)
  cmpl   $0x5b,-0x28(%rbp)
  je     L83
  cmpl   $0x5b,-0x28(%rbp)
  jg     L350
  cmpl   $0x3f,-0x28(%rbp)
  je     L185
  cmpl   $0x3f,-0x28(%rbp)
  jg     L350
  cmpl   $0x0,-0x28(%rbp)
  je     L133
  cmpl   $0x2a,-0x28(%rbp)
  je     L42
L350:
  mov    -0x28(%rbp),%eax
  movzbl %al,%eax
  cmp    %eax,%r13d
  je     L190
  cmpl   $0x0,-0x38(%rbp)
  sete   %al
  movzbl %al,%eax
  jmp    L283
L133:
  test   %r13d,%r13d
  je     L336
  cmpl   $0x0,-0x38(%rbp)
  sete   %al
  movzbl %al,%eax
  jmp    L283
L336:
  mov    -0x38(%rbp),%eax
  jmp    L283
L185:
  test   %r13d,%r13d
  jne    L252
  cmpl   $0x0,-0x38(%rbp)
  sete   %al
  movzbl %al,%eax
  jmp    L283
L42:
  movzbl (%rbx),%eax
  test   %al,%al
  jne    L204
  mov    -0x38(%rbp),%eax
  jmp    L283
L204:
  sub    $0x1,%r12
  jmp    L46
L254:
  mov    %rbx,%rsi
  mov    %r12,%rdi
  call   <matchglob>
  test   %eax,%eax
  je     L199
  mov    -0x38(%rbp),%eax
  jmp    L283
L199:
  add    $0x1,%r12
L46:
  movzbl (%r12),%eax
  test   %al,%al
  jne    L254
  cmpl   $0x0,-0x38(%rbp)
  sete   %al
  movzbl %al,%eax
  jmp    L283
L83:
  movl   $0x7fff,-0x30(%rbp)
  movl   $0x1,-0x2c(%rbp)
  movzbl (%rbx),%eax
  cmp    $0x5e,%al
  jne    L31
  movl   $0x0,-0x2c(%rbp)
  add    $0x1,%rbx
L31:
  cmpl   $0x0,-0x2c(%rbp)
  sete   %al
  movzbl %al,%eax
  mov    %eax,-0x34(%rbp)
L54:
  mov    %rbx,%rax
  lea    0x1(%rax),%rbx
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,-0x24(%rbp)
  cmpl   $0x0,-0x24(%rbp)
  jne    L291
  cmpl   $0x0,-0x38(%rbp)
  sete   %al
  movzbl %al,%eax
  jmp    L283
L291:
  cmpl   $0x5d,-0x24(%rbp)
  je     L149
  cmpl   $0x2d,-0x24(%rbp)
  jne    L337
  cmp    %r13d,-0x30(%rbp)
  jg     L54
  mov    %rbx,%rax
  lea    0x1(%rax),%rbx
  movzbl (%rax),%eax
  movsbl %al,%eax
  cmp    %eax,%r13d
  jg     L54
  mov    -0x2c(%rbp),%eax
  mov    %eax,-0x34(%rbp)
  jmp    L54
L337:
  mov    -0x24(%rbp),%eax
  mov    %eax,-0x30(%rbp)
  cmp    %r13d,-0x30(%rbp)
  jne    L54
  mov    -0x2c(%rbp),%eax
  mov    %eax,-0x34(%rbp)
  jmp    L54
L149:
  nop
  cmpl   $0x0,-0x34(%rbp)
  jne    L196
  cmpl   $0x0,-0x38(%rbp)
  sete   %al
  movzbl %al,%eax
  jmp    L283
L190:
  nop
  jmp    L275
L252:
  nop
  jmp    L275
L196:
  nop
  jmp    L275
L283:
  add    $0x28,%rsp
  pop    %rbx
  pop    %r12
  pop    %r13
  pop    %rbp
  ret
```

assistant: ```c
int matchglob(register char *s, register char *p) {
  register scc;
  int c, yes;
  yes = 1;
  if (*p == '^') {
    yes = 0;
    ++p;
  }
  for (;;) {
    scc = *s++ & 0377;
    switch (c = *p++) {
    default:
      if ((c & 0377) != scc)
        return (!yes);
      continue;
    case 0:
      return (scc == 0 ? yes : !yes);
    case '?':
      if (scc == 0)
        return (!yes);
      continue;
    case '*':
      if (!*p)
        return (yes);
      for (--s; *s; ++s)
        if (matchglob(s, p))
          return (yes);
      return (!yes);
    case '[': {
      int ok, lc, good;
      lc = 077777;
      good = 1;
      if (*p == '^') {
        good = 0;
        ++p;
      }
      ok = !good;
      for (;;) {
        int cc;
        cc = *p++;
        if (cc == 0)
          return (!yes);
        if (cc == ']')
          break;
        if (cc == '-') {
          if (lc <= scc && scc <= *p++)
            ok = good;
        } else if (scc == (lc = cc))
          ok = good;
      }
      if (!ok)
        return (!yes);
      continue;
    }
    }
  }
}
```