user: Demonstrate the C code that generates the assembly output below:

```asm
<help>:
  endbr64
  push   %rbx
  test   %rdi,%rdi
  je     L110
  mov    %rdi,%rbx
  lea    D82(%rip),%rsi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L140
  lea    D53(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L53
  lea    D70(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L25
  lea    D104(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L213
  lea    D52(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L192
  lea    D101(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L212
  lea    D88(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L207
  lea    D44(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L104
  lea    D122(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L202
  lea    D123(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L219
  lea    D6(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L64
  lea    D22(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L247
  call   <help_checkout@plt>
  jmp    L256
L110:
  mov    $0x0,%eax
  call   <help_ls@plt>
  jmp    L256
L140:
  call   <help_help@plt>
L256:
  pop    %rbx
  ret
L53:
  call   <help_prompt@plt>
  jmp    L256
L25:
  call   <help_init@plt>
  jmp    L256
L213:
  call   <help_drop@plt>
  jmp    L256
L192:
  call   <help_create_service@plt>
  jmp    L256
L212:
  call   <help_list@plt>
  jmp    L256
L207:
  call   <help_switch@plt>
  jmp    L256
L104:
  call   <help_back@plt>
  jmp    L256
L202:
  call   <help_book@plt>
  jmp    L256
L219:
  call   <help_service@plt>
  jmp    L256
L64:
  call   <help_bill@plt>
  jmp    L256
L247:
  lea    D118(%rip),%rdi
  call   <error_print@plt>
  jmp    L256
```

tool_calls: name: read_data
arguments: data_tag: D82
type: string
name: read_data
arguments: data_tag: D53
type: string
name: read_data
arguments: data_tag: D70
type: string
name: read_data
arguments: data_tag: D104
type: string
name: read_data
arguments: data_tag: D52
type: string
name: read_data
arguments: data_tag: D101
type: string
name: read_data
arguments: data_tag: D88
type: string
name: read_data
arguments: data_tag: D44
type: string
name: read_data
arguments: data_tag: D122
type: string
name: read_data
arguments: data_tag: D123
type: string
name: read_data
arguments: data_tag: D6
type: string
name: read_data
arguments: data_tag: D22
type: string
name: read_data
arguments: data_tag: D118
type: string

tool: D82: help

tool: D53: prompt

tool: D70: init

tool: D104: drop

tool: D52: create-service

tool: D101: list

tool: D88: switch

tool: D44: back

tool: D122: book

tool: D123: service

tool: D6: bill

tool: D22: checkout

tool: D118: Unknown command!

assistant: ```c
void help(char *command) {
  if (!command)
    help_ls();
  else if (!strcmp(command, "help"))
    help_help();
  else if (!strcmp(command, "prompt"))
    help_prompt();
  else if (!strcmp(command, "init"))
    help_init();
  else if (!strcmp(command, "drop"))
    help_drop();
  else if (!strcmp(command, "create-service"))
    help_create_service();
  else if (!strcmp(command, "list"))
    help_list();
  else if (!strcmp(command, "switch"))
    help_switch();
  else if (!strcmp(command, "back"))
    help_back();
  else if (!strcmp(command, "book"))
    help_book();
  else if (!strcmp(command, "service"))
    help_service();
  else if (!strcmp(command, "bill"))
    help_bill();
  else if (!strcmp(command, "checkout"))
    help_checkout();
  else
    error_print("Unknown command!");
}
```