user: 下面的汇编指令对应的C源代码是什么：

```asm
<escape>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %rdx,-0x28(%rbp)
  movq   $0x0,-0x8(%rbp)
  jmp    L100
L58:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  cmp    $0x3f,%eax
  jg     L133
  cmp    $0x9,%eax
  jl     L0
  sub    $0x9,%eax
  cmp    $0x36,%eax
  ja     L0
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D17(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D17(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
L133:
  cmp    $0x5c,%eax
  je     L78
  jmp    L0
  mov    -0x20(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  movb   $0x5c,(%rax)
  addq   $0x1,-0x8(%rbp)
  mov    -0x20(%rbp),%rax
  movb   $0x6e,(%rax)
  jmp    L127
  mov    -0x20(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  movb   $0x5c,(%rax)
  addq   $0x1,-0x8(%rbp)
  mov    -0x20(%rbp),%rax
  movb   $0x72,(%rax)
  jmp    L127
  mov    -0x20(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  movb   $0x5c,(%rax)
  addq   $0x1,-0x8(%rbp)
  mov    -0x20(%rbp),%rax
  movb   $0x74,(%rax)
  jmp    L127
L78:
  mov    -0x20(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  movb   $0x5c,(%rax)
  addq   $0x1,-0x8(%rbp)
  mov    -0x20(%rbp),%rax
  movb   $0x5c,(%rax)
  jmp    L127
  mov    -0x20(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  movb   $0x5c,(%rax)
  addq   $0x1,-0x8(%rbp)
  mov    -0x20(%rbp),%rax
  movb   $0x22,(%rax)
  jmp    L127
  mov    -0x20(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  movb   $0x5c,(%rax)
  addq   $0x1,-0x8(%rbp)
  mov    -0x20(%rbp),%rax
  movb   $0xb,(%rax)
  jmp    L127
  mov    -0x20(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  movb   $0x5c,(%rax)
  addq   $0x1,-0x8(%rbp)
  mov    -0x20(%rbp),%rax
  movb   $0x3f,(%rax)
  jmp    L127
  mov    -0x20(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  movb   $0x5c,(%rax)
  addq   $0x1,-0x8(%rbp)
  mov    -0x20(%rbp),%rax
  movb   $0xc,(%rax)
  jmp    L127
L0:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%edx
  mov    -0x20(%rbp),%rax
  mov    %dl,(%rax)
L127:
  addq   $0x1,-0x18(%rbp)
  addq   $0x1,-0x20(%rbp)
  addq   $0x1,-0x8(%rbp)
L100:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L51
  mov    -0x8(%rbp),%rax
  add    $0x3,%rax
  cmp    %rax,-0x28(%rbp)
  ja     L58
L51:
  mov    -0x20(%rbp),%rax
  movb   $0x0,(%rax)
  mov    -0x8(%rbp),%rax
  pop    %rbp
  ret
```

assistant: ```c
size_t escape(char *in, char *out, size_t outsize) {
  size_t l = 0;
  while (*in && l + 3 < outsize) {
    switch (*in) {
    case '\n':
      *out++ = '\\';
      l++;
      *out = 'n';
      break;
    case '\r':
      *out++ = '\\';
      l++;
      *out = 'r';
      break;
    case '\t':
      *out++ = '\\';
      l++;
      *out = 't';
      break;
    case '\\':
      *out++ = '\\';
      l++;
      *out = '\\';
      break;
    case '"':
      *out++ = '\\';
      l++;
      *out = '"';
      break;
    case '\v':
      *out++ = '\\';
      l++;
      *out = '\v';
      break;
    case '\?':
      *out++ = '\\';
      l++;
      *out = '\?';
      break;
    case '\f':
      *out++ = '\\';
      l++;
      *out = '\f';
      break;
    default:
      *out = *in;
    }
    in++;
    out++;
    l++;
  }
  *out = 0;
  return l;
}
```