user: Translate the below assembly code into C programming language:

```asm
<usage>:
  endbr64
  sub    $0x8,%rsp
  lea    D66(%rip),%rdi
  call   <printf@plt>
  lea    D2(%rip),%rdi
  call   <printf@plt>
  lea    D57(%rip),%rdi
  call   <printf@plt>
  lea    D36(%rip),%rdi
  call   <printf@plt>
  lea    D34(%rip),%rdi
  call   <printf@plt>
  lea    D129(%rip),%rdi
  call   <printf@plt>
  lea    D108(%rip),%rdi
  call   <printf@plt>
  lea    D78(%rip),%rdi
  call   <printf@plt>
  lea    D24(%rip),%rdi
  call   <printf@plt>
  lea    D23(%rip),%rdi
  call   <printf@plt>
  lea    D28(%rip),%rdi
  call   <printf@plt>
  lea    D120(%rip),%rdi
  call   <printf@plt>
  lea    D1(%rip),%rdi
  call   <printf@plt>
  add    $0x8,%rsp
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D66
datatype: string
name: extract_symbolic_data
arguments: data_label: D2
datatype: string
name: extract_symbolic_data
arguments: data_label: D57
datatype: string
name: extract_symbolic_data
arguments: data_label: D36
datatype: string
name: extract_symbolic_data
arguments: data_label: D34
datatype: string
name: extract_symbolic_data
arguments: data_label: D129
datatype: string
name: extract_symbolic_data
arguments: data_label: D108
datatype: string
name: extract_symbolic_data
arguments: data_label: D78
datatype: string
name: extract_symbolic_data
arguments: data_label: D24
datatype: string
name: extract_symbolic_data
arguments: data_label: D23
datatype: string
name: extract_symbolic_data
arguments: data_label: D28
datatype: string
name: extract_symbolic_data
arguments: data_label: D120
datatype: string
name: extract_symbolic_data
arguments: data_label: D1
datatype: string

tool: D66: USAGE:


tool: D2:     piboot <options> <kernel>


tool: D57: 


tool: D36:     -h | --help             Show this screen.


tool: D34:     -p | --port <device>    Use specified serial port to communicate.


tool: D129:     -b | --beef-bss         Fill BSS section with 0xDEADBEEF instead of zeros.


tool: D108:     -m | --monitor          Start monitoring uart output after starting kernel


tool: D78:     -l | --load-addr <addr> Specify address where to load binary files.
       |                    Defaults to 0x8000, increases with each loaded file.
       |                    Has no effect when loading ELF files.


tool: D24:     -x | --exec-addr <addr> Address where to start executing. Defaults to
       |                    0x8000. When loading ELF, it's entrypoint address
       |                    is used instead.


tool: D23:     -s | --suspended        Do not start to execute right away.


tool: D28:     -w | --no-watchdog      Disable watchdog.


tool: D120:     -v | --verbose          Display what actions are performed.


tool: D1:     -r | --reboot           Reboot the Pi.


assistant: ```c
void usage(void) {
  printf("USAGE:\n");
  printf("    piboot <options> <kernel>\n");
  printf("\n");
  printf("    -h | --help             Show this screen.\n");
  printf("    -p | --port <device>    Use specified serial port to communicate.\n");
  printf("    -b | --beef-bss         Fill BSS section with 0xDEADBEEF instead of zeros.\n");
  printf("    -m | --monitor          Start monitoring uart output after starting kernel\n");
  printf("    -l | --load-addr <addr> Specify address where to load binary files.\n"
         "       |                    Defaults to 0x8000, increases with each loaded file.\n"
         "       |                    Has no effect when loading ELF files.\n");
  printf("    -x | --exec-addr <addr> Address where to start executing. Defaults to\n"
         "       |                    0x8000. When loading ELF, it's entrypoint address\n"
         "       |                    is used instead.\n");
  printf("    -s | --suspended        Do not start to execute right away.\n");
  printf("    -w | --no-watchdog      Disable watchdog.\n");
  printf("    -v | --verbose          Display what actions are performed.\n");
  printf("    -r | --reboot           Reboot the Pi.\n");
}
```