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

```asm
<cc2400_dactst>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xa0,%rsp
  mov    %edi,%eax
  mov    %ax,-0x94(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D175(%rip),%rax
  mov    %rax,-0x90(%rbp)
  lea    D189(%rip),%rax
  mov    %rax,-0x88(%rbp)
  lea    D113(%rip),%rax
  mov    %rax,-0x80(%rbp)
  lea    D134(%rip),%rax
  mov    %rax,-0x78(%rbp)
  lea    D181(%rip),%rax
  mov    %rax,-0x70(%rbp)
  lea    D33(%rip),%rax
  mov    %rax,-0x68(%rbp)
  lea    D48(%rip),%rax
  mov    %rax,-0x60(%rbp)
  lea    D176(%rip),%rax
  mov    %rax,-0x58(%rbp)
  lea    D35(%rip),%r8
  lea    D100(%rip),%rax
  mov    %rax,%rcx
  lea    D37(%rip),%rax
  mov    %rax,%rdx
  mov    $0xf,%esi
  mov    $0xf,%edi
  call   <bits@plt>
  movzwl -0x94(%rbp),%eax
  shr    $0xc,%ax
  movzwl %ax,%eax
  and    $0x7,%eax
  cltq
  mov    -0x90(%rbp,%rax,8),%rax
  mov    %rax,%r8
  lea    D158(%rip),%rax
  mov    %rax,%rcx
  lea    D126(%rip),%rax
  mov    %rax,%rdx
  mov    $0xc,%esi
  mov    $0xe,%edi
  call   <bits@plt>
  movzwl -0x94(%rbp),%eax
  shr    $0x6,%ax
  movzwl %ax,%eax
  and    $0x3f,%eax
  mov    %eax,%edx
  lea    -0x50(%rbp),%rax
  lea    D38(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  lea    -0x50(%rbp),%rax
  mov    %rax,%r8
  lea    D158(%rip),%rax
  mov    %rax,%rcx
  lea    D179(%rip),%rax
  mov    %rax,%rdx
  mov    $0x6,%esi
  mov    $0xb,%edi
  call   <bits@plt>
  movzwl -0x94(%rbp),%eax
  and    $0x3f,%eax
  mov    %eax,%edx
  lea    -0x50(%rbp),%rax
  lea    D38(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  lea    -0x50(%rbp),%rax
  mov    %rax,%r8
  lea    D158(%rip),%rax
  mov    %rax,%rcx
  lea    D58(%rip),%rax
  mov    %rax,%rdx
  mov    $0x0,%esi
  mov    $0x5,%edi
  call   <bits@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L1
  call   <__stack_chk_fail@plt>
L1:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: tag: D175
type: string
name: extract_symbolic_data
arguments: tag: D189
type: string
name: extract_symbolic_data
arguments: tag: D113
type: string
name: extract_symbolic_data
arguments: tag: D134
type: string
name: extract_symbolic_data
arguments: tag: D181
type: string
name: extract_symbolic_data
arguments: tag: D33
type: string
name: extract_symbolic_data
arguments: tag: D48
type: string
name: extract_symbolic_data
arguments: tag: D176
type: string
name: extract_symbolic_data
arguments: tag: D35
type: string
name: extract_symbolic_data
arguments: tag: D100
type: string
name: extract_symbolic_data
arguments: tag: D37
type: string
name: extract_symbolic_data
arguments: tag: D158
type: string
name: extract_symbolic_data
arguments: tag: D126
type: string
name: extract_symbolic_data
arguments: tag: D38
type: string
name: extract_symbolic_data
arguments: tag: D179
type: string
name: extract_symbolic_data
arguments: tag: D58
type: string

tool: D175: Normal

tool: D189: Override

tool: D113: From ADC

tool: D134: I/Q after digital down-mixing and channel filtering

tool: D181: Full-spectrum White Noise

tool: D33: RX signal magnitude/frequency

tool: D48: RSSI/RX frequency offset estimation

tool: D176: HSSD Module

tool: 

tool: D100: W0

tool: D37: -

tool: D158: RW

tool: D126: DAC_SRC

tool: D38: %d

tool: D179: DAC_I_O

tool: D58: DAC_Q_O

assistant: ```c
void cc2400_dactst(unsigned short v) {
  char *src[] = {"Normal", "Override", "From ADC", "I/Q after digital down-mixing and channel filtering", "Full-spectrum White Noise", "RX signal magnitude/frequency", "RSSI/RX frequency offset estimation", "HSSD Module"};
  char description[64];
  bits(15, 15, "-", "W0", "");
  bits(14, 12, "DAC_SRC", "RW", src[(v >> 12) & 0x7]);
  sprintf(description, "%d", (v >> 6) & 0x3F);
  bits(11, 6, "DAC_I_O", "RW", description);
  sprintf(description, "%d", v & 0x3F);
  bits(5, 0, "DAC_Q_O", "RW", description);
}
```