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

```asm
<collapse_continuations>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbx
  sub    $0x18,%rsp
  mov    %rdi,-0x38(%rbp)
  mov    -0x38(%rbp),%rax
  mov    $0xa,%esi
  mov    %rax,%rdi
  call   <strchr@plt>
  mov    %rax,%r12
  test   %r12,%r12
  je     L185
  mov    %r12,%rbx
  jmp    L107
L248:
  sub    $0x1,%rbx
L107:
  cmp    -0x38(%rbp),%rbx
  jbe    L271
  lea    -0x1(%rbx),%rax
  movzbl (%rax),%eax
  cmp    $0x5c,%al
  je     L248
  jmp    L271
L115:
  mov    $0x0,%r14d
  mov    $0x0,%r15d
  lea    -0x1(%r12),%r13
  jmp    L226
L26:
  test   %r14d,%r14d
  je     L120
  add    $0x1,%r15d
L120:
  test   %r14d,%r14d
  sete   %al
  movzbl %al,%r14d
  lea    -0x1(%rbx),%rax
  cmp    %rax,%r12
  jne    L181
  mov    $0x0,%eax
  call   <abort@plt>
L181:
  sub    $0x1,%r13
L226:
  cmp    -0x38(%rbp),%r13
  jb     L189
  movzbl 0x0(%r13),%eax
  cmp    $0x5c,%al
  je     L26
  jmp    L189
L78:
  mov    %rbx,%rax
  lea    0x1(%rax),%rbx
  movb   $0x5c,(%rax)
L189:
  mov    %r15d,%eax
  lea    -0x1(%rax),%r15d
  test   %eax,%eax
  jne    L78
  add    $0x1,%r12
  test   %r14d,%r14d
  je     L45
  mov    %r12,%rdi
  call   <next_token@plt>
  mov    %rax,%r12
  jmp    L93
L46:
  sub    $0x1,%rbx
L93:
  cmp    -0x38(%rbp),%rbx
  jbe    L53
  lea    -0x1(%rbx),%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  je     L46
  lea    -0x1(%rbx),%rax
  movzbl (%rax),%eax
  cmp    $0x9,%al
  je     L46
L53:
  mov    %rbx,%rax
  lea    0x1(%rax),%rbx
  movb   $0x20,(%rax)
  jmp    L62
L45:
  mov    %rbx,%rax
  lea    0x1(%rax),%rbx
  movb   $0xa,(%rax)
  jmp    L62
L214:
  movzbl (%r12),%eax
  cmp    $0x5c,%al
  jne    L8
  lea    0x1(%r12),%r13
  jmp    L195
L82:
  add    $0x1,%r13
L195:
  movzbl 0x0(%r13),%eax
  cmp    $0x5c,%al
  je     L82
  movzbl 0x0(%r13),%eax
  cmp    $0xa,%al
  jne    L106
  mov    %r13,%r12
  jmp    L271
L262:
  mov    %r12,%rdx
  lea    0x1(%rdx),%r12
  mov    %rbx,%rax
  lea    0x1(%rax),%rbx
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
L106:
  cmp    %r13,%r12
  jb     L262
  jmp    L62
L8:
  mov    %r12,%rdx
  lea    0x1(%rdx),%r12
  mov    %rbx,%rax
  lea    0x1(%rax),%rbx
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
L62:
  movzbl (%r12),%eax
  test   %al,%al
  jne    L214
L271:
  movzbl (%r12),%eax
  test   %al,%al
  jne    L115
  movb   $0x0,(%rbx)
  jmp    L235
L185:
  nop
L235:
  add    $0x18,%rsp
  pop    %rbx
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  pop    %rbp
  ret
```

assistant: ```c
void collapse_continuations(char *line) {
  register char *in, *out, *p;
  register int backslash;
  register unsigned int bs_write;
  in = strchr(line, '\n');
  if (in == 0)
    return;
  out = in;
  while (out > line && out[-1] == '\\')
    --out;
  while (*in != '\0') {
    backslash = 0;
    bs_write = 0;
    for (p = in - 1; p >= line && *p == '\\'; --p) {
      if (backslash)
        ++bs_write;
      backslash = !backslash;
      if (in == out - 1)
        abort();
    }
    while (bs_write-- > 0)
      *out++ = '\\';
    ++in;
    if (backslash) {
      in = next_token(in);
      while (out > line && (((unsigned char)out[-1]) == ' ' || ((unsigned char)out[-1]) == '\t'))
        --out;
      *out++ = ' ';
    } else
      *out++ = '\n';
    while (*in != '\0')
      if (*in == '\\') {
        p = in + 1;
        while (*p == '\\')
          ++p;
        if (*p == '\n') {
          in = p;
          break;
        }
        while (in < p)
          *out++ = *in++;
      } else
        *out++ = *in++;
  }
  *out = '\0';
}
```