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

```asm
<usage>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %rdi,-0x8(%rbp)
  mov    %rsi,-0x10(%rbp)
  mov    -0x10(%rbp),%rdx
  mov    -0x8(%rbp),%rax
  lea    D31(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rcx
  mov    $0x36,%edx
  mov    $0x1,%esi
  lea    D37(%rip),%rax
  mov    %rax,%rdi
  call   <fwrite@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rcx
  mov    $0x15,%edx
  mov    $0x1,%esi
  lea    D159(%rip),%rax
  mov    %rax,%rdi
  call   <fwrite@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rcx
  mov    $0x35,%edx
  mov    $0x1,%esi
  lea    D165(%rip),%rax
  mov    %rax,%rdi
  call   <fwrite@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rcx
  mov    $0x21,%edx
  mov    $0x1,%esi
  lea    D134(%rip),%rax
  mov    %rax,%rdi
  call   <fwrite@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rcx
  mov    $0x28,%edx
  mov    $0x1,%esi
  lea    D150(%rip),%rax
  mov    %rax,%rdi
  call   <fwrite@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rcx
  mov    $0x38,%edx
  mov    $0x1,%esi
  lea    D3(%rip),%rax
  mov    %rax,%rdi
  call   <fwrite@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rcx
  mov    $0x38,%edx
  mov    $0x1,%esi
  lea    D2(%rip),%rax
  mov    %rax,%rdi
  call   <fwrite@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rcx
  mov    $0x33,%edx
  mov    $0x1,%esi
  lea    D5(%rip),%rax
  mov    %rax,%rdi
  call   <fwrite@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rcx
  mov    $0x36,%edx
  mov    $0x1,%esi
  lea    D95(%rip),%rax
  mov    %rax,%rdi
  call   <fwrite@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rcx
  mov    $0x25,%edx
  mov    $0x1,%esi
  lea    D89(%rip),%rax
  mov    %rax,%rdi
  call   <fwrite@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rcx
  mov    $0x36,%edx
  mov    $0x1,%esi
  lea    D87(%rip),%rax
  mov    %rax,%rdi
  call   <fwrite@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rcx
  mov    $0x36,%edx
  mov    $0x1,%esi
  lea    D47(%rip),%rax
  mov    %rax,%rdi
  call   <fwrite@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rcx
  mov    $0x29,%edx
  mov    $0x1,%esi
  lea    D98(%rip),%rax
  mov    %rax,%rdi
  call   <fwrite@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rcx
  mov    $0x36,%edx
  mov    $0x1,%esi
  lea    D90(%rip),%rax
  mov    %rax,%rdi
  call   <fwrite@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rcx
  mov    $0x31,%edx
  mov    $0x1,%esi
  lea    D77(%rip),%rax
  mov    %rax,%rdi
  call   <fwrite@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rcx
  mov    $0x2e,%edx
  mov    $0x1,%esi
  lea    D33(%rip),%rax
  mov    %rax,%rdi
  call   <fwrite@plt>
  nop
  leave
  ret
```

tool_calls: name: parse_data
arguments: tag: D31
type: string
name: parse_data
arguments: tag: D37
type: string
name: parse_data
arguments: tag: D159
type: string
name: parse_data
arguments: tag: D165
type: string
name: parse_data
arguments: tag: D134
type: string
name: parse_data
arguments: tag: D150
type: string
name: parse_data
arguments: tag: D3
type: string
name: parse_data
arguments: tag: D2
type: string
name: parse_data
arguments: tag: D5
type: string
name: parse_data
arguments: tag: D95
type: string
name: parse_data
arguments: tag: D89
type: string
name: parse_data
arguments: tag: D87
type: string
name: parse_data
arguments: tag: D47
type: string
name: parse_data
arguments: tag: D98
type: string
name: parse_data
arguments: tag: D90
type: string
name: parse_data
arguments: tag: D77
type: string
name: parse_data
arguments: tag: D33
type: string

tool: D31: usage: %s [-h|-?] [-v] [-l] [-d] [-3] [-n nrruns] [-i iterations]


tool: D37:                      [-r rollout] [-a] test [test...]


tool: D159: 
	-h|-?  : this help


tool: D165: 	-v     : verbose, display actual PMC counter values


tool: D134: 	-l     : list all defined tests


tool: D150: 	-d     : dump generated code to stdout


tool: D3: 	-3     : generate code with 32-bit operands by default


tool: D2: 	-6     : generate code with 64-bit operands by default


tool: D5: 	-n runs: repeat each run <runs> times and average


tool: D95: 	-i iter: repeat the 8 instructions <iter> times in a


tool: D89: 	         loop, default is 1 million


tool: D87: 	-r loop: roll out the loops <loop> times, default: 8


tool: D47: 	-c file: load binary code from file and execute that


tool: D98: 	-a     : run all defined tests in a row


tool: D90: 	test   : test name, can be followed by .32 or .64 to


tool: D77: 	         explicitly specify the operand bitness


tool: D33: 	         use -l to get list of defined tests


assistant: ```c
void usage(FILE *outf, const char *progname) {
  fprintf(outf, "usage: %s [-h|-?] [-v] [-l] [-d] [-3] [-n nrruns] [-i iterations]\n", progname);
  fprintf(outf, "                     [-r rollout] [-a] test [test...]\n");
  fprintf(outf, "\n\t-h|-?  : this help\n");
  fprintf(outf, "\t-v     : verbose, display actual PMC counter values\n");
  fprintf(outf, "\t-l     : list all defined tests\n");
  fprintf(outf, "\t-d     : dump generated code to stdout\n");
  fprintf(outf, "\t-3     : generate code with 32-bit operands by default\n");
  fprintf(outf, "\t-6     : generate code with 64-bit operands by default\n");
  fprintf(outf, "\t-n runs: repeat each run <runs> times and average\n");
  fprintf(outf, "\t-i iter: repeat the 8 instructions <iter> times in a\n");
  fprintf(outf, "\t         loop, default is 1 million\n");
  fprintf(outf, "\t-r loop: roll out the loops <loop> times, default: 8\n");
  fprintf(outf, "\t-c file: load binary code from file and execute that\n");
  fprintf(outf, "\t-a     : run all defined tests in a row\n");
  fprintf(outf, "\ttest   : test name, can be followed by .32 or .64 to\n");
  fprintf(outf, "\t         explicitly specify the operand bitness\n");
  fprintf(outf, "\t         use -l to get list of defined tests\n");
  return;
}
```