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

```asm
<send_headers>:
  endbr64
  push   %r14
  lea    D39(%rip),%r14
  push   %r13
  push   %r12
  mov    %rdx,%r12
  mov    %edi,%edx
  lea    D114(%rip),%rdi
  push   %rbp
  mov    %rcx,%rbp
  mov    %rsi,%rcx
  lea    D115(%rip),%rsi
  push   %rbx
  mov    %r8,%rbx
  sub    $0x90,%rsp
  mov    %r9,0x8(%rsp)
  lea    0x20(%rsp),%r13
  mov    %fs:0x28,%rax
  mov    %rax,0x88(%rsp)
  xor    %eax,%eax
  call   <printf@plt>
  lea    D109(%rip),%rsi
  lea    D49(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  xor    %edi,%edi
  call   <time@plt>
  lea    0x18(%rsp),%rdi
  mov    %rax,0x18(%rsp)
  call   <gmtime@plt>
  mov    $0x64,%esi
  mov    %r13,%rdi
  mov    %r14,%rdx
  mov    %eax,%ecx
  call   <strftime@plt>
  xor    %eax,%eax
  mov    %r13,%rsi
  lea    D119(%rip),%rdi
  call   <printf@plt>
  test   %r12,%r12
  je     L40
  mov    %r12,%rsi
  lea    D27(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
L40:
  test   %rbp,%rbp
  je     L14
  mov    %rbp,%rsi
  lea    D106(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
L14:
  test   %rbx,%rbx
  js     L7
  mov    %ebx,%esi
  lea    D110(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
L7:
  cmpq   $0xffffffffffffffff,0x8(%rsp)
  je     L38
  lea    0x8(%rsp),%rdi
  call   <gmtime@plt>
  mov    $0x64,%esi
  mov    %r13,%rdi
  mov    %r14,%rdx
  mov    %eax,%ecx
  call   <strftime@plt>
  mov    %r13,%rsi
  lea    D117(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
L38:
  lea    D10(%rip),%rdi
  call   <puts@plt>
  lea    D81(%rip),%rdi
  call   <puts@plt>
  mov    0x88(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L4
  add    $0x90,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L4:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: data_label: D39
type: string
name: retrieve_data
arguments: data_label: D114
type: string
name: retrieve_data
arguments: data_label: D115
type: string
name: retrieve_data
arguments: data_label: D109
type: string
name: retrieve_data
arguments: data_label: D49
type: string
name: retrieve_data
arguments: data_label: D119
type: string
name: retrieve_data
arguments: data_label: D27
type: string
name: retrieve_data
arguments: data_label: D106
type: string
name: retrieve_data
arguments: data_label: D110
type: string
name: retrieve_data
arguments: data_label: D117
type: string
name: retrieve_data
arguments: data_label: D10
type: string
name: retrieve_data
arguments: data_label: D81
type: string

tool: D39: %a, %d %b %Y %H:%M:%S GMT

tool: D114: %s %d %s


tool: D115: HTTP/1.0

tool: D109: micro_httpd

tool: D49: Server: %s


tool: D119: Date: %s


tool: D27: %s


tool: D106: Content-Type: %s


tool: D110: Content-Length: %lld


tool: D117: Last-Modified: %s


tool: D10: Connection: close

tool: D81: 

assistant: ```c
void send_headers(int status, char *title, char *extra_header, char *mime_type, off_t length, time_t mod) {
  time_t now;
  char timebuf[100];
  (void)printf("%s %d %s\015\012", "HTTP/1.0", status, title);
  (void)printf("Server: %s\015\012", "micro_httpd");
  now = time((time_t *)0);
  (void)strftime(timebuf, sizeof(timebuf), "%a, %d %b %Y %H:%M:%S GMT", gmtime(&now));
  (void)printf("Date: %s\015\012", timebuf);
  if (extra_header != (char *)0)
    (void)printf("%s\015\012", extra_header);
  if (mime_type != (char *)0)
    (void)printf("Content-Type: %s\015\012", mime_type);
  if (length >= 0)
    (void)printf("Content-Length: %lld\015\012", (int64_t)length);
  if (mod != (time_t)-1) {
    (void)strftime(timebuf, sizeof(timebuf), "%a, %d %b %Y %H:%M:%S GMT", gmtime(&mod));
    (void)printf("Last-Modified: %s\015\012", timebuf);
  }
  (void)printf("Connection: close\015\012");
  (void)printf("\015\012");
}
```