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

```asm
<command_dispatcher>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  lea    -0xf4000(%rsp),%r11
L244:
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  cmp    %r11,%rsp
  jne    L244
  sub    $0x260,%rsp
  lea    D113(%rip),%rsi
  mov    %fs:0x28,%rax
  mov    %rax,0xf4258(%rsp)
  xor    %eax,%eax
  lea    0x6(%rsp),%r12
  mov    %rdi,%rbp
  mov    %r12,%rdx
  call   <sscanf@plt>
  test   %eax,%eax
  jle    L104
  cmpl   $0x74697571,0x6(%rsp)
  je     L306
L230:
  cmpl   $0x6e756f6d,0x6(%rsp)
  je     L428
L321:
  cmpw   $0x736c,0x6(%rsp)
  je     L426
L447:
  cmpl   $0x69616863,0x6(%rsp)
  je     L89
L453:
  cmpl   $0x746166,0x6(%rsp)
  je     L442
  movabs $0x7461665f706d7564,%rax
  cmp    %rax,0x6(%rsp)
  je     L362
L157:
  cmpl   $0x706d7564,0x6(%rsp)
  je     L210
L3:
  cmpl   $0x6d756468,0x6(%rsp)
  je     L380
L31:
  cmpl   $0x6f666e69,0x6(%rsp)
  je     L343
L161:
  cmpl   $0x776f6873,0x6(%rsp)
  je     L128
L118:
  lea    D149(%rip),%rdi
  call   <printf@plt>
  nopl   0x0(%rax)
L104:
  mov    0xf4258(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L9
  add    $0xf4260,%rsp
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  nopl   0x0(%rax)
L306:
  cmpb   $0x0,0xa(%rsp)
  jne    L230
  xor    %eax,%eax
  call   <quit_command@plt>
  jmp    L104
  nopl   0x0(%rax)
L428:
  cmpw   $0x74,0xa(%rsp)
  jne    L321
  lea    0x10(%rsp),%r13
  xor    %eax,%eax
  mov    %r12,%rdx
  mov    %rbp,%rdi
  mov    %r13,%rcx
  lea    D4(%rip),%rsi
  call   <sscanf@plt>
  cmp    $0x1,%eax
  jle    L392
  mov    %r13,%rdi
  call   <mount_command@plt>
  jmp    L104
  nopl   0x0(%rax,%rax,1)
L89:
  cmpw   $0x6e,0xa(%rsp)
  jne    L453
  xor    %eax,%eax
  lea    0x5(%rsp),%rcx
  mov    %r12,%rdx
  mov    %rbp,%rdi
  lea    D157(%rip),%rsi
  call   <sscanf@plt>
  cmp    $0x1,%eax
  jle    L295
  movsbl 0x5(%rsp),%edi
  call   <chain_command@plt>
  jmp    L104
  nopl   (%rax)
L426:
  cmpb   $0x0,0x8(%rsp)
  jne    L447
  lea    0x10(%rsp),%r13
  xor    %eax,%eax
  mov    %r12,%rdx
  mov    %rbp,%rdi
  mov    %r13,%rcx
  lea    D4(%rip),%rsi
  call   <sscanf@plt>
  cmp    $0x1,%eax
  jle    L312
  mov    %r13,%rdi
  call   <ls_command@plt>
  jmp    L104
  nopl   0x0(%rax)
L442:
  xor    %eax,%eax
  call   <fat_command@plt>
  jmp    L104
  nopl   0x0(%rax)
L380:
  cmpw   $0x70,0xa(%rsp)
  jne    L31
  lea    0x10(%rsp),%r13
  xor    %eax,%eax
  mov    %r12,%rdx
  mov    %rbp,%rdi
  mov    %r13,%rcx
  lea    D4(%rip),%rsi
  call   <sscanf@plt>
  cmp    $0x1,%eax
  jle    L303
  mov    %r13,%rdi
  call   <hdump_command@plt>
  jmp    L104
  xchg   %ax,%ax
L392:
  lea    D83(%rip),%rdi
  call   <printf@plt>
  jmp    L104
  nopl   0x0(%rax)
L312:
  lea    D61(%rip),%rdi
  call   <printf@plt>
  jmp    L104
  nopl   0x0(%rax)
L362:
  cmpb   $0x0,0xe(%rsp)
  jne    L157
  lea    0x10(%rsp),%r13
  xor    %eax,%eax
  mov    %r12,%rdx
  mov    %rbp,%rdi
  mov    %r13,%rcx
  lea    D4(%rip),%rsi
  call   <sscanf@plt>
  cmp    $0x1,%eax
  jle    L130
  mov    %r13,%rdi
  call   <dump_fat_command@plt>
  jmp    L104
  nopl   0x0(%rax)
L210:
  cmpb   $0x0,0xa(%rsp)
  jne    L3
  lea    0x10(%rsp),%r13
  xor    %eax,%eax
  mov    %r12,%rdx
  mov    %rbp,%rdi
  mov    %r13,%rcx
  lea    D4(%rip),%rsi
  call   <sscanf@plt>
  cmp    $0x1,%eax
  jle    L5
  mov    %r13,%rdi
  call   <dump_command@plt>
  jmp    L104
L295:
  lea    D38(%rip),%rdi
  call   <printf@plt>
  jmp    L104
  xchg   %ax,%ax
L343:
  cmpb   $0x0,0xa(%rsp)
  jne    L161
  xor    %eax,%eax
  call   <info_command@plt>
  jmp    L104
L130:
  lea    D139(%rip),%rdi
  call   <printf@plt>
  jmp    L104
L128:
  cmpb   $0x0,0xa(%rsp)
  jne    L118
  xor    %eax,%eax
  lea    0x5(%rsp),%rcx
  mov    %r12,%rdx
  mov    %rbp,%rdi
  lea    D2(%rip),%rsi
  call   <sscanf@plt>
  cmp    $0x1,%eax
  jle    L245
  movsbl 0x5(%rsp),%edi
  call   <show_command@plt>
  jmp    L104
L5:
  lea    D155(%rip),%rdi
  call   <printf@plt>
  jmp    L104
L303:
  lea    D143(%rip),%rdi
  call   <printf@plt>
  jmp    L104
L245:
  lea    D93(%rip),%rdi
  call   <printf@plt>
  jmp    L104
L9:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: label: D113
type_guessed: string
name: retrieve_data
arguments: label: D149
type_guessed: string
name: retrieve_data
arguments: label: D4
type_guessed: string
name: retrieve_data
arguments: label: D157
type_guessed: string
name: retrieve_data
arguments: label: D83
type_guessed: string
name: retrieve_data
arguments: label: D61
type_guessed: string
name: retrieve_data
arguments: label: D38
type_guessed: string
name: retrieve_data
arguments: label: D139
type_guessed: string
name: retrieve_data
arguments: label: D2
type_guessed: string
name: retrieve_data
arguments: label: D155
type_guessed: string
name: retrieve_data
arguments: label: D143
type_guessed: string
name: retrieve_data
arguments: label: D93
type_guessed: string

tool: D113: %s

tool: D149: 404 Not Found


tool: D4: %s %s

tool: D157: %s %hu

tool: D83: mount mount-device


tool: D61: ls directory


tool: D38: chain cluster-number


tool: D139: dump_fat file-path


tool: D2: %s %c

tool: D155: dump file-name

tool: D143: hdump file-name

tool: D93: show w|c


assistant: ```c
void command_dispatcher(const char *command) {
  char verb[10];
  int len;
  len = sscanf(command, "%s", verb);
  if (len < 1) {
    return;
  }
  if (!strcmp(verb, "quit")) {
    quit_command();
  } else if (!strcmp(verb, "mount")) {
    char dev[(1000 * 1000)];
    int len = 0;
    len = sscanf(command, "%s %s", verb, dev);
    if (len < 2) {
      printf("mount mount-device\n");
      return;
    }
    mount_command(dev);
  } else if (!strcmp(verb, "ls")) {
    char dir[(1000 * 1000)];
    int len;
    len = sscanf(command, "%s %s", verb, dir);
    if (len < 2) {
      printf("ls directory\n");
      return;
    }
    ls_command(dir);
  } else if (!strcmp(verb, "chain")) {
    uint16_t index;
    int len;
    len = sscanf(command, "%s %hu", verb, &index);
    if (len < 2) {
      printf("chain cluster-number\n");
      return;
    }
    chain_command(index);
  } else if (!strcmp(verb, "fat")) {
    fat_command();
  } else if (!strcmp(verb, "dump_fat")) {
    char path[(1000 * 1000)];
    int len;
    len = sscanf(command, "%s %s", verb, path);
    if (len < 2) {
      printf("dump_fat file-path\n");
      return;
    }
    dump_fat_command(path);
  } else if (!strcmp(verb, "dump")) {
    char dir[(1000 * 1000)];
    int len;
    len = sscanf(command, "%s %s", verb, dir);
    if (len < 2) {
      printf("dump file-name");
      return;
    }
    dump_command(dir);
  } else if (!strcmp(verb, "hdump")) {
    char dir[(1000 * 1000)];
    int len;
    len = sscanf(command, "%s %s", verb, dir);
    if (len < 2) {
      printf("hdump file-name");
      return;
    }
    hdump_command(dir);
  } else if (!strcmp(verb, "info")) {
    info_command();
  } else if (!strcmp(verb, "show")) {
    char c;
    int len;
    len = sscanf(command, "%s %c", verb, &c);
    if (len < 2) {
      printf("show w|c\n");
      return;
    }
    show_command(c);
  } else {
    printf("404 Not Found\n");
  }
}
```