user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<OUTSTRING>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x18(%rbp)
  movl   $0x0,-0x4(%rbp)
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x22,%al
  jne    L306
  movl   $0x0,-0x8(%rbp)
  jmp    L38
L306:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x27,%al
  jne    L135
  movl   $0x1,-0x8(%rbp)
  jmp    L38
L135:
  lea    D1(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <instruction_error@plt>
L38:
  addq   $0x1,-0x18(%rbp)
  jmp    L73
L255:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x22,%al
  jne    L266
  cmpl   $0x0,-0x8(%rbp)
  jne    L171
  cmpl   $0x0,-0x4(%rbp)
  je     L39
L171:
  mov    $0x22,%edi
  call   <OUTBYTE@plt>
  movl   $0x0,-0x4(%rbp)
  jmp    L285
L266:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x27,%al
  jne    L231
  cmpl   $0x1,-0x8(%rbp)
  jne    L26
  cmpl   $0x0,-0x4(%rbp)
  je     L90
L26:
  mov    $0x27,%edi
  call   <OUTBYTE@plt>
  movl   $0x0,-0x4(%rbp)
  jmp    L285
L231:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x6e,%al
  jne    L105
  cmpl   $0x0,-0x4(%rbp)
  je     L161
  mov    $0xa,%edi
  call   <OUTBYTE@plt>
  jmp    L43
L161:
  mov    $0x6e,%edi
  call   <OUTBYTE@plt>
L43:
  movl   $0x0,-0x4(%rbp)
  jmp    L285
L105:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x74,%al
  jne    L211
  cmpl   $0x0,-0x4(%rbp)
  je     L93
  mov    $0x9,%edi
  call   <OUTBYTE@plt>
  jmp    L34
L93:
  mov    $0x74,%edi
  call   <OUTBYTE@plt>
L34:
  movl   $0x0,-0x4(%rbp)
  jmp    L285
L211:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x72,%al
  jne    L309
  cmpl   $0x0,-0x4(%rbp)
  je     L274
  mov    $0xd,%edi
  call   <OUTBYTE@plt>
  jmp    L53
L274:
  mov    $0x72,%edi
  call   <OUTBYTE@plt>
L53:
  movl   $0x0,-0x4(%rbp)
  jmp    L285
L309:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x5c,%al
  jne    L300
  cmpl   $0x0,-0x4(%rbp)
  je     L29
  mov    $0x5c,%edi
  call   <OUTBYTE@plt>
  movl   $0x0,-0x4(%rbp)
  jmp    L285
L29:
  movl   $0x1,-0x4(%rbp)
  jmp    L285
L300:
  cmpl   $0x0,-0x4(%rbp)
  je     L273
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%esi
  lea    D11(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <instruction_error@plt>
L273:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <OUTBYTE@plt>
L285:
  addq   $0x1,-0x18(%rbp)
L73:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L255
  jmp    L64
L39:
  nop
  jmp    L64
L90:
  nop
L64:
  nop
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_label: D1
datatype: string
name: parse_data
arguments: data_label: D11
datatype: string

tool: D1: OUTSTRING <INTERNAL ERROR>. Not a string!

tool: D11: Invalid escape sequence \%c in string

assistant: ```c
void OUTSTRING(char *string) {
  int stringt;
  int esc = 0;
  if (*string == '"')
    stringt = 0;
  else if (*string == '\'')
    stringt = 1;
  else
    instruction_error("OUTSTRING <INTERNAL ERROR>. Not a string!");
  string++;
  while (*string) {
    if (*string == '"') {
      if (stringt == 0 && !esc)
        break;
      OUTBYTE('"');
      esc = 0;
    } else if (*string == '\'') {
      if (stringt == 1 && !esc)
        break;
      OUTBYTE('\'');
      esc = 0;
    } else if (*string == 'n') {
      if (esc)
        OUTBYTE('\n');
      else
        OUTBYTE('n');
      esc = 0;
    } else if (*string == 't') {
      if (esc)
        OUTBYTE('\t');
      else
        OUTBYTE('t');
      esc = 0;
    } else if (*string == 'r') {
      if (esc)
        OUTBYTE('\r');
      else
        OUTBYTE('r');
      esc = 0;
    } else if (*string == '\\') {
      if (esc) {
        OUTBYTE('\\');
        esc = 0;
      } else
        esc = 1;
    } else {
      if (esc)
        instruction_error("Invalid escape sequence \\%c in string", *string);
      OUTBYTE(*string);
    }
    string++;
  }
}
```