user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<command_help>:
  endbr64
  push   %rbx
  mov    0x8(%rsi),%rbx
  test   %rbx,%rbx
  je     L11
  lea    D125(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L139
  lea    D46(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L118
  lea    D15(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L91
  lea    D90(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L66
  lea    D128(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L126
  lea    D0(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  jne    L109
  lea    D149(%rip),%rdi
  call   <puts@plt>
  jmp    L1
L139:
  lea    D97(%rip),%rdi
  call   <puts@plt>
  jmp    L1
L118:
  lea    D60(%rip),%rdi
  call   <puts@plt>
  jmp    L1
L91:
  lea    D136(%rip),%rdi
  call   <puts@plt>
  jmp    L1
L66:
  lea    D84(%rip),%rdi
  call   <puts@plt>
  jmp    L1
L126:
  lea    D113(%rip),%rdi
  call   <puts@plt>
  jmp    L1
L109:
  mov    %rbx,%rsi
  lea    D36(%rip),%rdi
  call   <printf@plt>
  lea    D104(%rip),%rdi
  call   <puts@plt>
  jmp    L1
L11:
  lea    D114(%rip),%rdi
  call   <puts@plt>
L1:
  pop    %rbx
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D125
type_infered: string
name: disassemble_data
arguments: data_label: D46
type_infered: string
name: disassemble_data
arguments: data_label: D15
type_infered: string
name: disassemble_data
arguments: data_label: D90
type_infered: string
name: disassemble_data
arguments: data_label: D128
type_infered: string
name: disassemble_data
arguments: data_label: D0
type_infered: string
name: disassemble_data
arguments: data_label: D149
type_infered: string
name: disassemble_data
arguments: data_label: D97
type_infered: string
name: disassemble_data
arguments: data_label: D60
type_infered: string
name: disassemble_data
arguments: data_label: D136
type_infered: string
name: disassemble_data
arguments: data_label: D84
type_infered: string
name: disassemble_data
arguments: data_label: D113
type_infered: string
name: disassemble_data
arguments: data_label: D36
type_infered: string
name: disassemble_data
arguments: data_label: D104
type_infered: string
name: disassemble_data
arguments: data_label: D114
type_infered: string

tool: D125: flat

tool: D46: help

tool: D15: istore

tool: D90: gmap

tool: D128: time

tool: D0: quit

tool: D149: Quit.  It quits.


tool: D97: FLAT is a very simple single piece of storage that can be read and
written as a whole.  It never changes its size.
Commands:
    flat open [path] [data]    -- open or create the database in <path>;
                                  if new, fill it with <data> (default:
                                  "Hello, World!")
    flat close                 -- close the currently open database
    flat remove [path]         -- remove the database file <path>
    flat write [data]	        -- write <data> into the flat database
    flat read [N]              -- read data (and dump N bytes)


tool: D60: To get more detailed help on a subject, type "help <subject>".
Subjects are:
    help   -- you're reading it
    flat   -- flat database commands
    istore -- indexed database commands
    gmap   -- map database commands
    time   -- monitoring execution time


tool: D136: ISTORE is an indexed table of fixed- but variable-sized structures.
Commands:
    istore open [path]         -- open or create the database in <path>
    istore close               -- close the currently open database
    istore remove [path]       -- rm -rf the database files
    istore write [[N] size]    -- create 1 (or <N>) objects of size <size>
    istore read N [size]       -- access object #n (and print <size> bytes)
    istore next-id             -- print the next ID that would be allocated


tool: D84: GMAP maps indices to sets of indices.
Commands:
    gmap open [path]           -- open or create the database in <path>
    gmap close                 -- close the currently open database
    gmap remove [path]         -- rm -rf the database files
    gmap add N M               -- add <M> to the index set for <N>
    gmap read N                -- print the index set for <N>


tool: D113: A special "time" flag, if set, causes command execution times
to be printed along with the results.  It can be set interactively,
or from the addb command line with -t.
Commands:
    time                       -- print whether timing is on or off
    time now                   -- print current time
    time on                    -- start printing execution times
    time off                   -- stop printing execution times


tool: D36: Sorry, no help on "%s"


tool: D104: Available: flat help istore time

tool: D114: Addb is a test client for libaddb.a, the attention deficit datab--OOH, SHINY!
For help on a command, use "help command".  Quickreference:
    help [command]       flat open [path [data]]    istore open [path]
    quit                 flat close                 istore close
    time                 flat remove [path]         istore remove [path]
    time [on / off]      flat read [nbytes]         istore read N [nbytes]
    time now             flat write data            istore write [[N] size]


assistant: ```c
void command_help(char const *progname, char const *const *argv, char const *filename, int line) {
  if (argv[1]) {
    if (!strcasecmp(argv[1], "flat"))
      puts("FLAT is a very simple single piece of storage that can be read and\n"
           "written as a whole.  It never changes its size.\n"
           "Commands:\n"
           "    flat open [path] [data]    -- open or create the database in "
           "<path>;\n"
           "                                  if new, fill it with <data> "
           "(default:\n"
           "                                  \"Hello, World!\")\n"
           "    flat close                 -- close the currently open "
           "database\n"
           "    flat remove [path]         -- remove the database file <path>\n"
           "    flat write [data]	        -- write <data> into the flat "
           "database\n"
           "    flat read [N]              -- read data (and dump N bytes)\n");
    else if (!strcasecmp(argv[1], "help"))
      puts("To get more detailed help on a subject, type \"help <subject>\".\n"
           "Subjects are:\n"
           "    help   -- you're reading it\n"
           "    flat   -- flat database commands\n"
           "    istore -- indexed database commands\n"
           "    gmap   -- map database commands\n"
           "    time   -- monitoring execution time\n");
    else if (!strcasecmp(argv[1], "istore"))
      puts("ISTORE is an indexed table of fixed- but variable-sized "
           "structures.\n"
           "Commands:\n"
           "    istore open [path]         -- open or create the database in "
           "<path>\n"
           "    istore close               -- close the currently open "
           "database\n"
           "    istore remove [path]       -- rm -rf the database files\n"
           "    istore write [[N] size]    -- create 1 (or <N>) objects of size "
           "<size>\n"
           "    istore read N [size]       -- access object #n (and print "
           "<size> bytes)\n"
           "    istore next-id             -- print the next ID that would be "
           "allocated\n");
    else if (!strcasecmp(argv[1], "gmap"))
      puts("GMAP maps indices to sets of indices.\n"
           "Commands:\n"
           "    gmap open [path]           -- open or create the database in "
           "<path>\n"
           "    gmap close                 -- close the currently open "
           "database\n"
           "    gmap remove [path]         -- rm -rf the database files\n"
           "    gmap add N M               -- add <M> to the index set for <N>\n"
           "    gmap read N                -- print the index set for <N>\n");
    else if (!strcasecmp(argv[1], "time"))
      puts("A special \"time\" flag, if set, causes command execution times\n"
           "to be printed along with the results.  It can be set "
           "interactively,\n"
           "or from the addb command line with -t.\n"
           "Commands:\n"
           "    time                       -- print whether timing is on or "
           "off\n"
           "    time now                   -- print current time\n"
           "    time on                    -- start printing execution times\n"
           "    time off                   -- stop printing execution times\n");
    else if (!strcasecmp(argv[1], "quit"))
      puts("Quit.  It quits.\n");
    else {
      printf("Sorry, no help on \"%s\"\n", argv[1]);
      puts("Available: flat help istore time");
      return;
    }
    return;
  }
  puts("Addb is a test client for libaddb.a, the attention deficit datab--OOH, "
       "SHINY!\n"
       "For help on a command, use \"help command\".  Quickreference:\n"
       "    help [command]       flat open [path [data]]    istore open [path]\n"
       "    quit                 flat close                 istore close\n"
       "    time                 flat remove [path]         istore remove "
       "[path]\n"
       "    time [on / off]      flat read [nbytes]         istore read N "
       "[nbytes]\n"
       "    time now             flat write data            istore write [[N] "
       "size]\n");
}
```