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

```asm
<OUTSTRING>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  mov    %rdi,%rbp
  movzbl (%rdi),%eax
  mov    $0x0,%r12d
  cmp    $0x22,%al
  je     L303
  cmp    $0x27,%al
  jne    L215
  mov    $0x1,%r12d
L303:
  lea    0x1(%rbp),%rbx
  movzbl 0x1(%rbp),%esi
  test   %sil,%sil
  je     L180
  mov    $0x0,%ebp
  lea    D2(%rip),%r13
  jmp    L232
L215:
  lea    D15(%rip),%rdi
  mov    $0x0,%eax
  call   <instruction_error@plt>
  jmp    L303
L150:
  cmp    $0x22,%sil
  jne    L61
  or     %r12d,%ebp
  je     L180
  mov    $0x22,%edi
  call   <OUTBYTE@plt>
  mov    $0x0,%ebp
  jmp    L164
L83:
  cmp    $0x72,%sil
  je     L285
  cmp    $0x74,%sil
  jne    L61
  test   %ebp,%ebp
  je     L27
  mov    $0x9,%edi
  call   <OUTBYTE@plt>
  mov    $0x0,%ebp
  jmp    L164
L301:
  test   %r12d,%r12d
  je     L140
  test   %ebp,%ebp
  je     L180
L140:
  mov    $0x27,%edi
  call   <OUTBYTE@plt>
  mov    $0x0,%ebp
  jmp    L164
L46:
  test   %ebp,%ebp
  je     L44
  mov    $0xa,%edi
  call   <OUTBYTE@plt>
  mov    $0x0,%ebp
  jmp    L164
L44:
  mov    $0x6e,%edi
  call   <OUTBYTE@plt>
  jmp    L164
L27:
  mov    $0x74,%edi
  call   <OUTBYTE@plt>
  jmp    L164
L285:
  test   %ebp,%ebp
  je     L86
  mov    $0xd,%edi
  call   <OUTBYTE@plt>
  mov    $0x0,%ebp
  jmp    L164
L86:
  mov    $0x72,%edi
  call   <OUTBYTE@plt>
  jmp    L164
L21:
  mov    $0x5c,%edi
  call   <OUTBYTE@plt>
  mov    $0x0,%ebp
  jmp    L164
L61:
  test   %ebp,%ebp
  jne    L69
L139:
  movsbl (%rbx),%edi
  call   <OUTBYTE@plt>
L164:
  add    $0x1,%rbx
  movzbl (%rbx),%esi
  test   %sil,%sil
  je     L180
L232:
  cmp    $0x6e,%sil
  je     L46
  jg     L83
  cmp    $0x27,%sil
  je     L301
  cmp    $0x5c,%sil
  jne    L150
  test   %ebp,%ebp
  jne    L21
  mov    $0x1,%ebp
  jmp    L164
L69:
  movsbl %sil,%esi
  mov    %r13,%rdi
  mov    $0x0,%eax
  call   <instruction_error@plt>
  jmp    L139
L180:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
```

tool_calls: name: read_data
arguments: tag: D2
type: string
name: read_data
arguments: tag: D15
type: string

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

tool: D15: OUTSTRING <INTERNAL ERROR>. Not a 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++;
  }
}
```