user: 请从给定的汇编指令推导出C源代码：

```asm
<outputProgramHelp>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %rdi,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  lea    D7(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  mov    -0x8(%rbp),%rax
  lea    D180(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  mov    -0x8(%rbp),%rax
  lea    D160(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  mov    -0x8(%rbp),%rax
  lea    D171(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  mov    -0x8(%rbp),%rax
  lea    D103(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  mov    -0x8(%rbp),%rax
  lea    D124(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  mov    -0x8(%rbp),%rax
  lea    D80(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  mov    -0x8(%rbp),%rax
  lea    D175(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  mov    -0x8(%rbp),%rax
  lea    D20(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  mov    -0x8(%rbp),%rax
  lea    D209(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  mov    -0x8(%rbp),%rax
  lea    D46(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  mov    -0x8(%rbp),%rax
  lea    D127(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  mov    -0x8(%rbp),%rax
  lea    D64(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  mov    -0x8(%rbp),%rax
  lea    D44(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  mov    -0x8(%rbp),%rax
  lea    D212(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  mov    -0x8(%rbp),%rax
  lea    D226(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  mov    -0x8(%rbp),%rax
  lea    D169(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  mov    -0x8(%rbp),%rax
  lea    D114(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  mov    -0x8(%rbp),%rax
  lea    D59(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  mov    -0x8(%rbp),%rax
  lea    D39(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  mov    -0x8(%rbp),%rax
  lea    D198(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  mov    -0x8(%rbp),%rax
  lea    D6(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  mov    -0x8(%rbp),%rax
  lea    D129(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  nop
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: tag: D7
type: string
name: extract_symbolic_data
arguments: tag: D180
type: string
name: extract_symbolic_data
arguments: tag: D160
type: string
name: extract_symbolic_data
arguments: tag: D171
type: string
name: extract_symbolic_data
arguments: tag: D103
type: string
name: extract_symbolic_data
arguments: tag: D124
type: string
name: extract_symbolic_data
arguments: tag: D80
type: string
name: extract_symbolic_data
arguments: tag: D175
type: string
name: extract_symbolic_data
arguments: tag: D20
type: string
name: extract_symbolic_data
arguments: tag: D209
type: string
name: extract_symbolic_data
arguments: tag: D46
type: string
name: extract_symbolic_data
arguments: tag: D127
type: string
name: extract_symbolic_data
arguments: tag: D64
type: string
name: extract_symbolic_data
arguments: tag: D44
type: string
name: extract_symbolic_data
arguments: tag: D212
type: string
name: extract_symbolic_data
arguments: tag: D226
type: string
name: extract_symbolic_data
arguments: tag: D169
type: string
name: extract_symbolic_data
arguments: tag: D114
type: string
name: extract_symbolic_data
arguments: tag: D59
type: string
name: extract_symbolic_data
arguments: tag: D39
type: string
name: extract_symbolic_data
arguments: tag: D198
type: string
name: extract_symbolic_data
arguments: tag: D6
type: string
name: extract_symbolic_data
arguments: tag: D129
type: string

tool: D7: 
RTL-Wx Weather Data Monitoring Software



tool: D180: This program attempts to collect data from 433Mhz wireless weather sensors


tool: D160: or an Oregon Scientific weather station connected through a serial port.



tool: D171: Commands:


tool: D103:              h  - help (this message)


tool: D124:              a  - Display Action Scheduler Info


tool: D80:              c  - Process configuration file


tool: D175:              d  - Show debugging statistics


tool: D20:              e  - Show energy data (kilowatts) for last 15 mins


tool: D209:              f  - invoke file parser - to replace tags w/data


tool: D46:              i  - Show config info


tool: D127:              l  - clear log file (rtl-wx.log)


tool: D64:              m  - show historical max/min data


tool: D44:              n  - clear historical max/min data


tool: D212:              r  - reset sensor lock codes and clear timeout counts


tool: D226:              s  - Save data snapshot now


tool: D169:              t  - Toggle raw sensor message display mode


tool: D114:              u  - Initiate FTP upload


tool: D59:              v  - (not implemented) Trim CSV files (older entries removed


tool: D39:              w  - Save webcam snapshot


tool: D198:              q  - quit client (server stays running)


tool: D6:             ESC - Kill server (and quit client)


tool: D129:             <Any other key shows current data>


assistant: ```c
void outputProgramHelp(FILE *fd) {
  fprintf(fd, "\nRTL-Wx Weather Data Monitoring Software\n\n");
  fprintf(fd, "This program attempts to collect data from 433Mhz wireless weather sensors\n");
  fprintf(fd, "or an Oregon Scientific weather station connected through a serial port.\n\n");
  fprintf(fd, "Commands:\n");
  fprintf(fd, "             h  - help (this message)\n");
  fprintf(fd, "             a  - Display Action Scheduler Info\n");
  fprintf(fd, "             c  - Process configuration file\n");
  fprintf(fd, "             d  - Show debugging statistics\n");
  fprintf(fd, "             e  - Show energy data (kilowatts) for last 15 mins\n");
  fprintf(fd, "             f  - invoke file parser - to replace tags w/data\n");
  fprintf(fd, "             i  - Show config info\n");
  fprintf(fd, "             l  - clear log file (rtl-wx.log)\n");
  fprintf(fd, "             m  - show historical max/min data\n");
  fprintf(fd, "             n  - clear historical max/min data\n");
  fprintf(fd, "             r  - reset sensor lock codes and clear timeout counts\n");
  fprintf(fd, "             s  - Save data snapshot now\n");
  fprintf(fd, "             t  - Toggle raw sensor message display mode\n");
  fprintf(fd, "             u  - Initiate FTP upload\n");
  fprintf(fd, "             v  - (not implemented) Trim CSV files (older entries removed\n");
  fprintf(fd, "             w  - Save webcam snapshot\n");
  fprintf(fd, "             q  - quit client (server stays running)\n");
  fprintf(fd, "            ESC - Kill server (and quit client)\n");
  fprintf(fd, "            <Any other key shows current data>\n");
}
```