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

```asm
<lancement_service>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x210,%rsp
  mov    %edi,%ebp
  mov    %fs:0x28,%rax
  mov    %rax,0x208(%rsp)
  xor    %eax,%eax
  movq   $0x0,(%rsp)
  movq   $0x0,0x8(%rsp)
  movq   $0x0,0x10(%rsp)
  movq   $0x0,0x18(%rsp)
  movq   $0x0,0x20(%rsp)
  movq   $0x0,0x28(%rsp)
  movq   $0x0,0x30(%rsp)
  movq   $0x0,0x38(%rsp)
  movq   $0x0,0x40(%rsp)
  movq   $0x0,0x48(%rsp)
  movq   $0x0,0x50(%rsp)
  movq   $0x0,0x58(%rsp)
  movq   $0x0,0x60(%rsp)
  movq   $0x0,0x68(%rsp)
  movq   $0x0,0x70(%rsp)
  movq   $0x0,0x78(%rsp)
  movq   $0x0,0x80(%rsp)
  movq   $0x0,0x88(%rsp)
  movq   $0x0,0x90(%rsp)
  movq   $0x0,0x98(%rsp)
  movq   $0x0,0xa0(%rsp)
  movq   $0x0,0xa8(%rsp)
  movq   $0x0,0xb0(%rsp)
  movq   $0x0,0xb8(%rsp)
  movq   $0x0,0xc0(%rsp)
  movq   $0x0,0xc8(%rsp)
  movq   $0x0,0xd0(%rsp)
  movq   $0x0,0xd8(%rsp)
  movq   $0x0,0xe0(%rsp)
  movq   $0x0,0xe8(%rsp)
  movq   $0x0,0xf0(%rsp)
  movq   $0x0,0xf8(%rsp)
  movq   $0x0,0x100(%rsp)
  movq   $0x0,0x108(%rsp)
  movq   $0x0,0x110(%rsp)
  movq   $0x0,0x118(%rsp)
  movq   $0x0,0x120(%rsp)
  movq   $0x0,0x128(%rsp)
  movq   $0x0,0x130(%rsp)
  movq   $0x0,0x138(%rsp)
  movq   $0x0,0x140(%rsp)
  movq   $0x0,0x148(%rsp)
  movq   $0x0,0x150(%rsp)
  movq   $0x0,0x158(%rsp)
  movq   $0x0,0x160(%rsp)
  movq   $0x0,0x168(%rsp)
  movq   $0x0,0x170(%rsp)
  movq   $0x0,0x178(%rsp)
  movq   $0x0,0x180(%rsp)
  movq   $0x0,0x188(%rsp)
  movq   $0x0,0x190(%rsp)
  movq   $0x0,0x198(%rsp)
  movq   $0x0,0x1a0(%rsp)
  movq   $0x0,0x1a8(%rsp)
  movq   $0x0,0x1b0(%rsp)
  movq   $0x0,0x1b8(%rsp)
  movq   $0x0,0x1c0(%rsp)
  movq   $0x0,0x1c8(%rsp)
  movq   $0x0,0x1d0(%rsp)
  movq   $0x0,0x1d8(%rsp)
  movq   $0x0,0x1e0(%rsp)
  movq   $0x0,0x1e8(%rsp)
  movq   $0x0,0x1f0(%rsp)
  movq   $0x0,0x1f8(%rsp)
  lea    0x100(%rsp),%rsi
  mov    $0xff,%edx
  call   <read@plt>
  test   %eax,%eax
  jle    L10
L101:
  mov    %ebp,%edi
  call   <liste_referentiel@plt>
  mov    %rsp,%rbx
  lea    D21(%rip),%r13
  lea    D12(%rip),%r12
  lea    D37(%rip),%r14
  jmp    L46
L10:
  lea    0x100(%rsp),%rdi
  lea    D20(%rip),%rsi
  call   <strcpy@plt>
  jmp    L101
L75:
  mov    %ebp,%edi
  call   <ecriture_s@plt>
L19:
  mov    %rbx,%rdi
  call   <lecture@plt>
  cmp    $0x1,%eax
  je     L75
  test   %eax,%eax
  js     L27
L82:
  mov    %r12,%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L32
  mov    %r14,%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L32
L46:
  mov    %ebp,%edi
  call   <lecture_s@plt>
  mov    $0x0,%eax
  call   <get_message@plt>
  mov    %eax,%edi
  mov    %rbx,%rdx
  mov    %r13,%rsi
  call   <sscanf@plt>
  test   %rax,%rax
  jle    L82
  jmp    L19
L27:
  mov    %rbx,%rdi
  call   <creation_message_erreur@plt>
  mov    %ebp,%edi
  call   <diffusion_erreur@plt>
  jmp    L82
L32:
  mov    %ebp,%edi
  call   <quitter@plt>
  mov    0x208(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L68
  add    $0x210,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L68:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: data_label: D21
datatype: string
name: unpack_data
arguments: data_label: D12
datatype: string
name: unpack_data
arguments: data_label: D37
datatype: string
name: unpack_data
arguments: data_label: D20
datatype: string

tool: D21: %s

tool: D12: q

tool: D37: Q

tool: D20: sombre inconnu

assistant: ```c
void lancement_service(int ta_socket) {
  int n;
  int choix;
  choix = 1;
  char mMessage[256] = "";
  char reponse[256] = "";
  char nom[256] = "";
  if ((n = read(ta_socket, nom, 256 - 1)) > 0)
    ;
  else
    strcpy(nom, "sombre inconnu");
  liste_referentiel(ta_socket);
  while (choix) {
    n = lecture_s(ta_socket);
    if (sscanf(get_message(), "%s", mMessage) > 0) {
      while ((n = lecture(mMessage)) == 1) {
        ecriture_s(ta_socket);
      }
      if (n < 0) {
        creation_message_erreur(mMessage);
        diffusion_erreur(ta_socket);
      }
    }
    if (!strcmp(mMessage, "q") || !strcmp(mMessage, "Q")) {
      choix = 0;
      quitter(ta_socket);
    }
  }
}
```