user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<print_help_message>:
  endbr64
  sub    $0x8,%rsp
  mov    %rdi,%rsi
  mov    %rdi,%r8
  mov    %rdi,%rcx
  mov    %rdi,%rdx
  lea    D4(%rip),%rdi
  call   <printf@plt>
  add    $0x8,%rsp
  ret
```

tool_calls: name: parse_data
arguments: label: D4
data_type: string

tool: D4: Usage: %s [options] {actions...}
Options:
  --mem         Use /dev/mem instead of /dev/vpmu-device-0 for communication
  --jit         Enable just-in-time model selection on performance simulation
  --trace       Enable VPMU event tracing and function tracking ability
                If "--trace" is set, the process will be traced automatically
  --phase       Enable VPMU phase detection, --trace will be forced to set
  --[MODEL]     [MODEL] could be one of the following
                    inst, cache, branch, pipeline, all_models
  --monitor     Enable VPMU event tracing and set the binary without
                executing them when using -e action
  --remove      Remove binary (specified by -e option) from monitoring list
  --help        Show this message


Actions:
  -r, --read  <address>          Read data from <address> of VPMU and print it out with "\n"
  -w, --write <address> <data>   Write <data> to <address> of VPMU
  --start       Start VPMU profiling with all performance simulators ON
                If "--trace" is set, "--start" do nothing
  --end         End/Stop VPMU profiling and report the results
                If "--trace" is set, "--end" do nothing
  --report      Simply report the current results. It can be used while profiling 
  -e, --exec    Run the program/executable.
                If "--trace" is set, the controller will also pass some of the sections
                (i.e. symbol table, dynamic libraries) of target binary to VPMU.

Example:
    %s --all_models --start --exec "ls -la" --end
    %s --all_models --phase -e "ls -la"
    %s --all_models --monitor -e ls


assistant: ```c
void print_help_message(const char *self) {
  printf("Usage: %s [options] {actions...}\n"
         "Options:\n"
         "  --mem         Use /dev/mem instead of /dev/vpmu-device-0 for communication\n"
         ""
         "  --jit         Enable just-in-time model selection on performance simulation\n"
         "  --trace       Enable VPMU event tracing and function tracking ability\n"
         "                If \"--trace\" is set, the process will be traced automatically\n"
         "  --phase       Enable VPMU phase detection, --trace will be forced to set\n"
         "  --[MODEL]     [MODEL] could be one of the following\n"
         "                    inst, cache, branch, pipeline, all_models\n"
         "  --monitor     Enable VPMU event tracing and set the binary without\n"
         "                executing them when using -e action\n"
         "  --remove      Remove binary (specified by -e option) from monitoring list\n"
         "  --help        Show this message\n"
         "\n\n"
         "Actions:\n"
         "  -r, --read  <address>          Read data from <address> of VPMU and print it "
         "out with \"\\n\"\n"
         "  -w, --write <address> <data>   Write <data> to <address> of VPMU\n"
         "  --start       Start VPMU profiling with all performance simulators ON\n"
         "                If \"--trace\" is set, \"--start\" do nothing\n"
         "  --end         End/Stop VPMU profiling and report the results\n"
         "                If \"--trace\" is set, \"--end\" do nothing\n"
         "  --report      Simply report the current results. It can be used while profiling "
         "\n"
         "  -e, --exec    Run the program/executable.\n"
         "                If \"--trace\" is set, the controller will also pass some of the "
         "sections\n"
         "                (i.e. symbol table, dynamic libraries) of target binary to VPMU.\n"
         "\n"
         "Example:\n"
         "    %s --all_models --start --exec \"ls -la\" --end\n"
         "    %s --all_models --phase -e \"ls -la\"\n"
         "    %s --all_models --monitor -e ls\n",
         self, self, self, self);
}
```