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

```asm
<print_sys_cfg_rates_ext_usage>:
  endbr64
  sub    $0x8,%rsp
  lea    D114(%rip),%rdi
  call   <printf@plt>
  lea    D38(%rip),%rdi
  call   <printf@plt>
  lea    D106(%rip),%rdi
  call   <printf@plt>
  lea    D108(%rip),%rdi
  call   <printf@plt>
  lea    D85(%rip),%rdi
  call   <printf@plt>
  lea    D110(%rip),%rdi
  call   <printf@plt>
  lea    D67(%rip),%rdi
  call   <printf@plt>
  lea    D30(%rip),%rdi
  call   <printf@plt>
  lea    D69(%rip),%rdi
  call   <printf@plt>
  lea    D56(%rip),%rdi
  call   <printf@plt>
  lea    D60(%rip),%rdi
  call   <printf@plt>
  lea    D66(%rip),%rdi
  call   <printf@plt>
  lea    D88(%rip),%rdi
  call   <printf@plt>
  lea    D139(%rip),%rdi
  add    $0x8,%rsp
  jmp    1050 <printf@plt>
```

tool_calls: name: disassemble_data
arguments: label: D114
type: string
name: disassemble_data
arguments: label: D38
type: string
name: disassemble_data
arguments: label: D106
type: string
name: disassemble_data
arguments: label: D108
type: string
name: disassemble_data
arguments: label: D85
type: string
name: disassemble_data
arguments: label: D110
type: string
name: disassemble_data
arguments: label: D67
type: string
name: disassemble_data
arguments: label: D30
type: string
name: disassemble_data
arguments: label: D69
type: string
name: disassemble_data
arguments: label: D56
type: string
name: disassemble_data
arguments: label: D60
type: string
name: disassemble_data
arguments: label: D66
type: string
name: disassemble_data
arguments: label: D88
type: string
name: disassemble_data
arguments: label: D139
type: string

tool: D114: 
Usage : sys_cfg_rates_ext [rates RATES] [mbrate RATE]


tool: D38: 
If 'Rate' provided, a 'set' is performed else a 'get' is performed

tool: D106: 
RATES is provided as a set of data rates, in unit of 500 kilobits

tool: D108: 
A rate with MSB bit is basic rate, i.e 0x82 is basic rate.


tool: D85: 
Following is the list of supported rates in units of 500 Kbps:

tool: D110: 
Decimal: (2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108)

tool: D67: 
Hex: (0x02, 0x04, 0x0b, 0x16, 0x0C, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6c)

tool: D30: 
Basic rates: (0x82, 0x84, 0x8b, 0x96, 0x8C, 0x92, 0x98, 0xA4, 0xB0, 0xC8, 0xE0, 0xEc)


tool: D69: 
Rates 2, 4, 11 and 22 (in units of 500 Kbps) must be present in either of basic or

tool: D56: 
non-basic rates. If OFDM rates are enabled then 12, 24 and 48 (in units of 500 Kbps)

tool: D60: 
must be present in either basic or non-basic rates

tool: D66: 
Each rate must be separated by a space.

tool: D88: 
rates followed by RATES for setting operational rates.

tool: D139: 
mbrate followed by RATE for setting multicast and broadcast rate.

assistant: ```c
void print_sys_cfg_rates_ext_usage(void) {
  printf("\nUsage : sys_cfg_rates_ext [rates RATES] [mbrate RATE]\n");
  printf("\nIf 'Rate' provided, a 'set' is performed else a 'get' is performed");
  printf("\nRATES is provided as a set of data rates, in unit of 500 kilobits");
  printf("\nA rate with MSB bit is basic rate, i.e 0x82 is basic rate.\n");
  printf("\nFollowing is the list of supported rates in units of 500 Kbps:");
  printf("\nDecimal: (2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108)");
  printf("\nHex: (0x02, 0x04, 0x0b, 0x16, 0x0C, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6c)");
  printf("\nBasic rates: (0x82, 0x84, 0x8b, 0x96, 0x8C, 0x92, 0x98, 0xA4, 0xB0, 0xC8, 0xE0, 0xEc)\n");
  printf("\nRates 2, 4, 11 and 22 (in units of 500 Kbps) must be present in either of basic or");
  printf("\nnon-basic rates. If OFDM rates are enabled then 12, 24 and 48 (in units of 500 Kbps)");
  printf("\nmust be present in either basic or non-basic rates");
  printf("\nEach rate must be separated by a space.");
  printf("\nrates followed by RATES for setting operational rates.");
  printf("\nmbrate followed by RATE for setting multicast and broadcast rate.");
  return;
}
```