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

```asm
<i3_write_header>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x8(%rbp)
  mov    %rsi,-0x10(%rbp)
  mov    %rdx,-0x18(%rbp)
  mov    %rcx,-0x20(%rbp)
  mov    %r8,-0x28(%rbp)
  lea    D128(%rip),%rax
  mov    %rax,%rdi
  call   <i3_write_buffer@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <i3_write_buffer@plt>
  lea    D32(%rip),%rax
  mov    %rax,%rdi
  call   <i3_write_buffer@plt>
  cmpq   $0x0,-0x10(%rbp)
  je     L70
  lea    D113(%rip),%rax
  mov    %rax,%rdi
  call   <i3_write_buffer@plt>
  mov    -0x10(%rbp),%rax
  mov    %rax,%rdi
  call   <i3_write_buffer@plt>
  lea    D102(%rip),%rax
  mov    %rax,%rdi
  call   <i3_write_buffer@plt>
  jmp    L55
L70:
  lea    D18(%rip),%rax
  mov    %rax,%rdi
  call   <i3_write_buffer@plt>
L55:
  cmpq   $0x0,-0x18(%rbp)
  je     L28
  lea    D113(%rip),%rax
  mov    %rax,%rdi
  call   <i3_write_buffer@plt>
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <i3_escape_name@plt>
  mov    %rax,%rdi
  call   <i3_write_buffer@plt>
  lea    D102(%rip),%rax
  mov    %rax,%rdi
  call   <i3_write_buffer@plt>
  jmp    L37
L28:
  lea    D18(%rip),%rax
  mov    %rax,%rdi
  call   <i3_write_buffer@plt>
L37:
  cmpq   $0x0,-0x20(%rbp)
  je     L18
  lea    D113(%rip),%rax
  mov    %rax,%rdi
  call   <i3_write_buffer@plt>
  mov    -0x20(%rbp),%rax
  mov    %rax,%rdi
  call   <i3_write_buffer@plt>
  lea    D102(%rip),%rax
  mov    %rax,%rdi
  call   <i3_write_buffer@plt>
  jmp    L10
L18:
  lea    D18(%rip),%rax
  mov    %rax,%rdi
  call   <i3_write_buffer@plt>
L10:
  cmpq   $0x0,-0x28(%rbp)
  je     L61
  lea    D113(%rip),%rax
  mov    %rax,%rdi
  call   <i3_write_buffer@plt>
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <i3_write_buffer@plt>
  lea    D102(%rip),%rax
  mov    %rax,%rdi
  call   <i3_write_buffer@plt>
  jmp    L64
L61:
  lea    D18(%rip),%rax
  mov    %rax,%rdi
  call   <i3_write_buffer@plt>
L64:
  nop
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D128
type: string
name: disassemble_data
arguments: data_label: D32
type: string
name: disassemble_data
arguments: data_label: D113
type: string
name: disassemble_data
arguments: data_label: D102
type: string
name: disassemble_data
arguments: data_label: D18
type: string

tool: D128: ({"

tool: D32: ",5,

tool: D113: "

tool: D102: ",

tool: D18: 0,

assistant: ```c
void i3_write_header(const char *identifier, const char *originator_mudname, const char *originator_username, const char *target_mudname, const char *target_username) {
  i3_write_buffer("({\"");
  i3_write_buffer(identifier);
  i3_write_buffer("\",5,");
  if (originator_mudname) {
    i3_write_buffer("\"");
    i3_write_buffer(originator_mudname);
    i3_write_buffer("\",");
  } else
    i3_write_buffer("0,");
  if (originator_username) {
    i3_write_buffer("\"");
    i3_write_buffer(i3_escape_name(originator_username));
    i3_write_buffer("\",");
  } else
    i3_write_buffer("0,");
  if (target_mudname) {
    i3_write_buffer("\"");
    i3_write_buffer(target_mudname);
    i3_write_buffer("\",");
  } else
    i3_write_buffer("0,");
  if (target_username) {
    i3_write_buffer("\"");
    i3_write_buffer(target_username);
    i3_write_buffer("\",");
  } else
    i3_write_buffer("0,");
}
```