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

```asm
<compile_set>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %rdx,-0x38(%rbp)
  mov    -0x28(%rbp),%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L112
  mov    $0xfffffffd,%eax
  jmp    L90
L112:
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  movb   $0x5b,(%rax)
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  mov    %rax,-0x8(%rbp)
  movl   $0x0,-0x14(%rbp)
  mov    -0x28(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L140
  mov    -0x28(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L140
  mov    -0x28(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L140
  mov    -0x28(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  cmp    $0x5d,%al
  je     L140
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%edx
  mov    -0x28(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  jle    L164
  mov    $0xfffffffc,%eax
  jmp    L90
L164:
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  movb   $0x2d,(%rax)
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  mov    -0x28(%rbp),%rdx
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  mov    -0x28(%rbp),%rdx
  movzbl 0x2(%rdx),%edx
  mov    %dl,(%rax)
  addq   $0x3,-0x28(%rbp)
  addl   $0x3,-0x14(%rbp)
  jmp    L138
L140:
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  movb   $0x4d,(%rax)
  mov    -0x28(%rbp),%rdx
  lea    0x1(%rdx),%rax
  mov    %rax,-0x28(%rbp)
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    %rcx,-0x30(%rbp)
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
  addl   $0x2,-0x14(%rbp)
L138:
  jmp    L199
L18:
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L144
  mov    $0xfffffffd,%eax
  jmp    L90
L144:
  mov    -0x28(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L94
  mov    -0x28(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L94
  mov    -0x28(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L94
  mov    -0x28(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  cmp    $0x5d,%al
  je     L94
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%edx
  mov    -0x28(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  jle    L119
  mov    $0xfffffffc,%eax
  jmp    L90
L119:
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  movb   $0x2d,(%rax)
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  mov    -0x28(%rbp),%rdx
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  mov    -0x28(%rbp),%rdx
  movzbl 0x2(%rdx),%edx
  mov    %dl,(%rax)
  addq   $0x3,-0x28(%rbp)
  addl   $0x3,-0x14(%rbp)
  jmp    L199
L94:
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  movb   $0x4d,(%rax)
  mov    -0x28(%rbp),%rdx
  lea    0x1(%rdx),%rax
  mov    %rax,-0x28(%rbp)
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    %rcx,-0x30(%rbp)
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
  addl   $0x2,-0x14(%rbp)
L199:
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x5d,%al
  je     L161
  mov    -0x30(%rbp),%rax
  cmp    -0x38(%rbp),%rax
  jb     L18
L161:
  cmpl   $0x7f,-0x14(%rbp)
  jle    L82
  mov    $0xfffffffb,%eax
  jmp    L90
L82:
  mov    -0x14(%rbp),%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  mov    %dl,(%rax)
  mov    -0x28(%rbp),%rax
  sub    -0x10(%rbp),%rax
L90:
  pop    %rbp
  ret
```

assistant: ```c
int compile_set(pattern, x, limit)
char *pattern;
char *x;
char *limit;
{
  char *slot;
  int size;
  char *start = pattern;
  if (*pattern == 0)
    return (-3);
  *x++ = '[';
  slot = x++;
  size = 0;
  if ((pattern[1] && pattern[2] && pattern[1] == '-' && pattern[2] != ']')) {
    if (pattern[0] > pattern[2])
      return (-4);
    *x++ = '-';
    *x++ = pattern[0];
    *x++ = pattern[2];
    pattern += 3;
    size += 3;
  } else {
    *x++ = 'M';
    *x++ = *pattern++;
    size += 2;
  }
  while (*pattern != ']' && x < limit) {
    if (*pattern == 0)
      return (-3);
    if ((pattern[1] && pattern[2] && pattern[1] == '-' && pattern[2] != ']')) {
      if (pattern[0] > pattern[2])
        return (-4);
      *x++ = '-';
      *x++ = pattern[0];
      *x++ = pattern[2];
      pattern += 3;
      size += 3;
    } else {
      *x++ = 'M';
      *x++ = *pattern++;
      size += 2;
    }
  }
  if (size > 0177)
    return (-5);
  *slot = size;
  return (pattern - start);
}
```