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

```asm
<has_globbing>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  cmp    %rsi,%rdi
  jae    L193
  mov    %rsi,%rbp
  xor    %r13d,%r13d
  xor    %r14d,%r14d
  xor    %r15d,%r15d
  xor    %edx,%edx
  lea    D18(%rip),%rcx
  jmp    L256
  nopw   0x0(%rax,%rax,1)
L136:
  cmp    $0x3f,%ebx
  je     L179
  cmp    $0x5b,%ebx
  je     L41
  cmp    $0x5d,%ebx
  je     L317
  test   %bl,%bl
  js     L301
L347:
  cmp    $0x7c,%ebx
  je     L178
  mov    %r12,%rdi
  cmp    $0x29,%ebx
  je     L134
  nopl   0x0(%rax)
L143:
  add    $0x1,%rdi
  cmp    %rdi,%rbp
  jbe    L303
L256:
  cmpb   $0x7,(%rdi)
  jne    L143
  movzbl 0x1(%rdi),%ebx
  lea    0x1(%rdi),%r12
  mov    %ebx,%esi
  cmp    $0x2a,%bl
  jne    L136
L179:
  mov    %r12,%rdi
  mov    $0x1,%r14d
  add    $0x1,%rdi
  cmp    %rdi,%rbp
  ja     L256
L303:
  xor    $0x1,%r13d
  test   %edx,%edx
  sete   %r15b
  and    %r14d,%r13d
  and    %r13d,%r15d
L175:
  add    $0x18,%rsp
  mov    %r15d,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L41:
  test   %r13d,%r13d
  jne    L5
  cmpb   $0x7,0x2(%rdi)
  je     L47
  mov    %r12,%rdi
  mov    $0x1,%r13d
  mov    $0x1,%r14d
  jmp    L143
  nopl   0x0(%rax,%rax,1)
L178:
  test   %r15d,%r15d
  je     L177
  nopl   0x0(%rax)
L5:
  mov    %r12,%rdi
  jmp    L143
  nopl   0x0(%rax,%rax,1)
L317:
  test   %r13d,%r13d
  je     L5
  test   %r15d,%r15d
  jne    L193
  xor    %r13d,%r13d
  mov    %r12,%rdi
  jmp    L143
  nopl   0x0(%rax)
L301:
  and    $0x7f,%esi
  mov    %rcx,%rdi
  mov    %edx,0xc(%rsp)
  call   <strchr@plt>
  mov    0xc(%rsp),%edx
  lea    D18(%rip),%rcx
  test   %rax,%rax
  je     L347
  test   %r13d,%r13d
  je     L244
  add    $0x1,%r15d
  mov    %r13d,%r14d
  mov    %r12,%rdi
  jmp    L143
  nopw   0x0(%rax,%rax,1)
L134:
  test   %r13d,%r13d
  je     L273
  lea    -0x1(%r15),%eax
  test   %r15d,%r15d
  je     L175
  mov    %eax,%r15d
  jmp    L143
  nopw   0x0(%rax,%rax,1)
L244:
  add    $0x1,%edx
  mov    %r12,%rdi
  mov    $0x1,%r14d
  jmp    L143
  nopl   0x0(%rax)
L177:
  test   %r13d,%r13d
  je     L5
L193:
  xor    %r15d,%r15d
  jmp    L175
L273:
  cmp    $0x1,%edx
  adc    $0xffffffff,%edx
  jmp    L143
  nopl   0x0(%rax)
L47:
  cmpb   $0x21,0x3(%rdi)
  je     L224
  mov    %r12,%rdi
L16:
  cmpb   $0x5d,0x2(%rdi)
  mov    $0x1,%r13d
  mov    $0x1,%r14d
  jne    L143
  add    $0x2,%rdi
  jmp    L143
L224:
  lea    0x3(%rdi),%rax
  cmpb   $0x7,0x4(%rdi)
  mov    %rax,%rdi
  je     L16
  mov    $0x1,%r13d
  mov    $0x1,%r14d
  jmp    L143
```

tool_calls: name: parse_data
arguments: data_label: D18
type: string

tool: D18: *+?@! 

assistant: ```c
int has_globbing(xp, xpe) const char *xp, *xpe;
{
  const unsigned char *p = (const unsigned char *)xp;
  const unsigned char *pe = (const unsigned char *)xpe;
  int c;
  int nest = 0, bnest = 0;
  int saw_glob = 0;
  int in_bracket = 0;
  for (; p < pe; p++) {
    if (!((unsigned char)(*p) == (7)))
      continue;
    if ((c = *++p) == '*' || c == '?')
      saw_glob = 1;
    else if (c == '[') {
      if (!in_bracket) {
        saw_glob = 1;
        in_bracket = 1;
        if (((unsigned char)(p[1]) == (7)) && p[2] == '!')
          p += 2;
        if (((unsigned char)(p[1]) == (7)) && p[2] == ']')
          p += 2;
      }
    } else if (c == ']') {
      if (in_bracket) {
        if (bnest)
          return 0;
        in_bracket = 0;
      }
    } else if ((c & 0x80) && strchr("*+?@! ", c & 0x7f)) {
      saw_glob = 1;
      if (in_bracket)
        bnest++;
      else
        nest++;
    } else if (c == '|') {
      if (in_bracket && !bnest)
        return 0;
    } else if (c == ')') {
      if (in_bracket) {
        if (!bnest--)
          return 0;
      } else if (nest)
        nest--;
    }
  }
  return saw_glob && !in_bracket && !nest;
}
```