user: 请将以下的汇编代码转换成C语言代码：

```asm
<emit_literal>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    %r8,(%rsp)
  mov    %r9,0x8(%rsp)
  cmp    %rdx,%rsi
  je     L56
  mov    %rdi,%rbp
  mov    %rsi,%r14
  mov    %rdx,%rbx
  mov    %rcx,%r13
  lea    D22(%rip),%r12
L150:
  mov    0x8(%rsp),%rdi
  call   <emit_indent@plt>
  mov    (%rsp),%rsi
  xor    %eax,%eax
  mov    %r13,%rdx
  lea    D23(%rip),%rdi
  call   <printf@plt>
  cmp    %r14,%rbx
  ja     L53
  jmp    L104
  nopl   (%rax)
L100:
  cmp    $0x27,%r15b
  je     L94
  movzbl %r15b,%edi
  call   <putchar@plt>
L92:
  add    $0x1,%r14
  cmp    %r14,%rbx
  je     L104
L53:
  movzbl 0x0(%rbp,%r14,1),%r15d
  cmp    $0x5c,%r15b
  je     L90
  cmp    $0x22,%r15b
  je     L90
  cmp    $0x1f,%r15b
  ja     L100
L94:
  lea    -0x8(%r15),%eax
  cmp    $0x5,%al
  ja     L5
  movzbl %al,%eax
  movslq (%r12,%rax,4),%rax
  add    %r12,%rax
  notrack jmp *%rax
  nopl   0x0(%rax)
  lea    D64(%rip),%rdi
  xor    %eax,%eax
  add    $0x1,%r14
  call   <printf@plt>
  cmp    %r14,%rbx
  jne    L53
L104:
  add    $0x18,%rsp
  lea    D24(%rip),%rdi
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1090 <puts@plt>
  nopl   0x0(%rax)
  lea    D56(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L92
  nopl   0x0(%rax,%rax,1)
  lea    D43(%rip),%rdi
  add    $0x1,%r14
  call   <puts@plt>
  cmp    $0x1,%r13
  sbb    $0xffffffffffffffff,%r13
  cmp    %r14,%rbx
  jne    L150
L56:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D19(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L92
  nopl   0x0(%rax,%rax,1)
  lea    D86(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L92
  nopl   0x0(%rax,%rax,1)
  lea    D30(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L92
  nopl   0x0(%rax,%rax,1)
L90:
  mov    $0x5c,%edi
  call   <putchar@plt>
  movzbl %r15b,%edi
  call   <putchar@plt>
  jmp    L92
L5:
  mov    $0x5c,%edi
  call   <putchar@plt>
  mov    $0x30,%edi
  call   <putchar@plt>
  mov    %r15d,%edi
  shr    $0x3,%dil
  add    $0x30,%edi
  movzbl %dil,%edi
  call   <putchar@plt>
  mov    %r15d,%edx
  and    $0x7,%edx
  lea    0x30(%rdx),%edi
  call   <putchar@plt>
  jmp    L92
```

tool_calls: name: disassemble_data
arguments: data_label: D23
type_guessed: string
name: disassemble_data
arguments: data_label: D64
type_guessed: string
name: disassemble_data
arguments: data_label: D24
type_guessed: string
name: disassemble_data
arguments: data_label: D56
type_guessed: string
name: disassemble_data
arguments: data_label: D43
type_guessed: string
name: disassemble_data
arguments: data_label: D19
type_guessed: string
name: disassemble_data
arguments: data_label: D86
type_guessed: string
name: disassemble_data
arguments: data_label: D30
type_guessed: string

tool: D23: TEXT_addstring (%s, %lu, "

tool: D64: \f

tool: D24: ");

tool: D56: \v

tool: D43: \n");

tool: D19: \t

tool: D86: \b

tool: D30: \r

assistant: ```c
void emit_literal(unsigned char *line, unsigned long startindex, unsigned long endindex, unsigned long lineno, const char *textvar, unsigned long indent) {
  unsigned long i;
restart:
  if (startindex == endindex)
    return;
  emit_indent(indent);
  printf("TEXT_addstring (%s, %lu, \"", textvar, lineno);
  for (i = startindex; i < endindex; i++) {
    unsigned char ch = line[i];
    if (ch == '\\' || ch == '"') {
      putchar('\\');
      putchar(ch);
    } else if (ch >= ' ' && ch != '\'') {
      putchar(ch);
    } else if (ch == '\n') {
      printf("\\n\");\n");
      startindex = i + 1;
      if (lineno > 0)
        lineno++;
      goto restart;
    } else if (ch == '\t') {
      printf("\\t");
    } else if (ch == '\b') {
      printf("\\b");
    } else if (ch == '\r') {
      printf("\\r");
    } else if (ch == '\f') {
      printf("\\f");
    } else if (ch == '\v') {
      printf("\\v");
    } else {
      putchar('\\');
      putchar('0' + ((ch / 64) % 8));
      putchar('0' + ((ch / 8) % 8));
      putchar('0' + (ch % 8));
    }
  }
  printf("\");\n");
}
```