user: 这段汇编代码用C语言表示是什么样的：

```asm
<cc2400_dactst>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x98,%rsp
  mov    %edi,%ebx
  mov    %fs:0x28,%rax
  mov    %rax,0x88(%rsp)
  xor    %eax,%eax
  lea    D7(%rip),%rax
  mov    %rax,(%rsp)
  lea    D105(%rip),%rax
  mov    %rax,0x8(%rsp)
  lea    D43(%rip),%rax
  mov    %rax,0x10(%rsp)
  lea    D73(%rip),%rax
  mov    %rax,0x18(%rsp)
  lea    D109(%rip),%rax
  mov    %rax,0x20(%rsp)
  lea    D146(%rip),%rax
  mov    %rax,0x28(%rsp)
  lea    D120(%rip),%rax
  mov    %rax,0x30(%rsp)
  lea    D158(%rip),%rax
  mov    %rax,0x38(%rsp)
  lea    D83(%rip),%r8
  lea    D96(%rip),%rcx
  lea    D115(%rip),%rdx
  mov    $0xf,%esi
  mov    $0xf,%edi
  call   <bits@plt>
  mov    %ebx,%eax
  shr    $0xc,%ax
  and    $0x7,%eax
  mov    (%rsp,%rax,8),%r8
  lea    D5(%rip),%r12
  mov    %r12,%rcx
  lea    D6(%rip),%rdx
  mov    $0xc,%esi
  mov    $0xe,%edi
  call   <bits@plt>
  mov    %ebx,%edx
  shr    $0x6,%dx
  and    $0x3f,%edx
  lea    0x40(%rsp),%rbp
  lea    D145(%rip),%r13
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%r8
  mov    %r12,%rcx
  lea    D27(%rip),%rdx
  mov    $0x6,%esi
  mov    $0xb,%edi
  call   <bits@plt>
  and    $0x3f,%ebx
  mov    %ebx,%edx
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%r8
  mov    %r12,%rcx
  lea    D50(%rip),%rdx
  mov    $0x0,%esi
  mov    $0x5,%edi
  call   <bits@plt>
  mov    0x88(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L4
  add    $0x98,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L4:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: data_tag: D7
type_infered: string
name: disassemble_data
arguments: data_tag: D105
type_infered: string
name: disassemble_data
arguments: data_tag: D43
type_infered: string
name: disassemble_data
arguments: data_tag: D73
type_infered: string
name: disassemble_data
arguments: data_tag: D109
type_infered: string
name: disassemble_data
arguments: data_tag: D146
type_infered: string
name: disassemble_data
arguments: data_tag: D120
type_infered: string
name: disassemble_data
arguments: data_tag: D158
type_infered: string
name: disassemble_data
arguments: data_tag: D83
type_infered: string
name: disassemble_data
arguments: data_tag: D96
type_infered: string
name: disassemble_data
arguments: data_tag: D115
type_infered: string
name: disassemble_data
arguments: data_tag: D5
type_infered: string
name: disassemble_data
arguments: data_tag: D6
type_infered: string
name: disassemble_data
arguments: data_tag: D145
type_infered: string
name: disassemble_data
arguments: data_tag: D27
type_infered: string
name: disassemble_data
arguments: data_tag: D50
type_infered: string

tool: D7: Normal

tool: D105: Override

tool: D43: From ADC

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

tool: D109: Full-spectrum White Noise

tool: D146: RX signal magnitude/frequency

tool: D120: RSSI/RX frequency offset estimation

tool: D158: HSSD Module

tool: 

tool: D96: W0

tool: D115: -

tool: D5: RW

tool: D6: DAC_SRC

tool: D145: %d

tool: D27: DAC_I_O

tool: D50: 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);
}
```